如何应用多个分组条件对熊猫数据框中的列执行操作?

时间:2018-09-30 23:45:40

标签: python pandas group-by

我是python的初学者。 我有这种形式的数据框:

  A B C
0 1 2 0.65
1 2 3 0.01
2 3 1 0.34
3 3 1 0.11
4 2 3 0.02
5 2 3 0.12

每当我在连续2行或更多行的A和B列中获得相同的值时,我希望在C列中添加值。我有几个要匹配的值。 输出应该是这样的:

  A B C
0 1 2 0.65
1 2 3 0.01
2 3 1 0.45
3 2 3 0.14

我确实在寻找解决方案并获得了以下代码:

res = df.groupby(by=[df.A.ne(2).cumsum(), 'A', df.B.ne(3).cumsum(), 'B'], as_index=False).agg({'C': 'sum'})

这段代码只给我最后两行的和。我希望能够一次完成。

谢谢, 莎拉

2 个答案:

答案 0 :(得分:1)

IIUC,您真的很亲近,只需添加一个diff

s1,s2 = df.A.diff().ne(0).cumsum(),df.B.diff().ne(0).cumsum()
df.groupby([s1,s2]).agg({'A':'first','B':'first','C':'sum'})
Out[95]: 
     A  B     C
A B            
1 1  1  2  0.65
2 2  2  3  0.01
3 3  3  1  0.45
4 4  2  3  0.14

答案 1 :(得分:0)

这是使用布尔掩码实现您想要的方法

   indices = []
   for index, row in df.iterrows():
       if row.A == row.B:
           if df.loc[index-1, 'A'] == df.loc[index-1, 'B']:
               indices.append(index)

   df[df.index.isin(indices)].C.sum()
相关问题