python - 将连续特定值的第一行保留在 pandas 数据框中?

标签 python pandas dataframe

我有一个像这样的数据框,

df
col1    col2
 1       A
 2       A
 3       A
 4       A
 5       A
 6       A
 7       B
 8       B
 9       A
 10      A
 11      A
 12      A
 13      B
 14      A
 15      B
 16      A
 17      A
 18      A

现在,如果有连续的 B 或两个 B 之间只有一行,则显示这些 B 的起始行。

所以最终输出看起来像,

 col1    col2
 7       B
 13      B

我可以使用 for 循环通过比较行值来完成此操作,但执行时间会很长。我正在寻找任何 Pandas 快捷方式或任何其他方法来最有效地做到这一点。

最佳答案

您可以首先将非 B 值替换为缺失值,然后按限制 1 向前填充它们 - 因此最后 2 个 B 创建一个组最后获取 B 组的第一个值:

m = df['col2'].where(df['col2'].eq('B')).ffill(limit=1).eq('B')
df = df[ m.ne(m.shift()) & m]
print (df)
    col1 col2
6      7    B
12    13    B

关于python - 将连续特定值的第一行保留在 pandas 数据框中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59453732/

相关文章:

python Pandas : replace groupby operation

python - 如何使用数据框中的特定行和列在 Panda Python 中创建直方图

python - 根据列找出数据框中的缺失值

Python 数据帧 : Seperate rows based on custom condition?

python - 无法在 Visual Studio Code 中调试 Django 单元测试

Python MySQL INSERT 抛出编程错误 : 1064

python - 使用 Python 和 LXML 从数据框创建 XML 文件

python - 为什么 (2^31) >> 32 不是 0?

python - 使用 pandas 从 xml 获取数据

r - 没有列名的 data.frames 的奇怪行为