首页 > 解决方案 > 根据从末尾开始的列值的计数过滤熊猫数据框

问题描述

我有一个这样的数据框,

df
col1    col2
1        A
2        B
1        A
2        A
3        B
4        A
5        A
6        A
7        B
8        A
9        B

现在我想过滤这个数据框,把所有的行都取到最后第三个B,所以数据框看起来像,

col1     col2
3        B -->third B
4        A
5        A
6        A
7        B -->second B
8        A
9        B -->first B

我可以使用 for 循环检查它是否在每次迭代中检查其 B 来执行此操作,但是执行需要更长的时间,寻找一些 pandas 快捷方式以有效的方式执行此操作。

标签: pythonpandasdataframe

解决方案


使用cumsumfrom numpy 计算 B 的数量并对其进行过滤:

df[np.cumsum(df['col2'] == 'B') >= df['col2'].value_counts()['B'] - 2]

推荐阅读