这是这post的延伸.
这是我的数据框:
import pandas as pd
df = pd.DataFrame(
{
'a': [ 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0],
'b': [-1, 1, 1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1]
}
)
而我想要的结果是将它们分组:
a b
4 1 1
5 0 -1
10 1 1
11 1 1
12 0 -1
基本上,我想将它们按1和在列a
中结束的位置之后的一行的连续性分组.
这answer个是这样做的:
g = df.loc[::-1, 'a'].eq(0).cumsum()
out = [g for _,g in df.groupby(g, sort=False) if len(g)>1]
但现在我想要的是判断每个组的b
中的第一个值是否为1.
我不知道判断第一个值b
的最佳方法是什么.
这就是我try 过的方法,但我不确定它是否在所有情况下都有效.
groups = df.groupby(g).filter(lambda x: x.b.iloc[0] == 1)
我经历过一些情况,其中代码在示例中可以工作,但它并不是在具有不同条件的每种情况下都能工作,所以我想重新判断我的代码.