pandas条件聚合

时间:2014-11-06 21:48:56

标签: python pandas aggregation

我想基于'id'对下面的数据帧进行分组,然后为'id'的所有值设置'flow'的总和,除了0;那些应该保持独立。什么是最好的解决方案?

原件:

id  flow
0   1
0   1
1   1
1   1
2   1
2   1

汇总:

id  flow
0   1
0   1
1   2   
2   2

2 个答案:

答案 0 :(得分:2)

一种方法是使用transform分配新的流值然后删除重复项:

In [48]:

df.loc[df['id'] != 0, 'flow'] = df.groupby('id')['flow'].transform('sum')
df.drop(df[df['id']!=0].drop_duplicates().index)
Out[48]:
   id  flow
0   0     1
1   0     1
3   1     2
5   2     2

答案 1 :(得分:0)

你可以将这个问题分解为你在除了0之外的所有id中进行分组然后只是附加0的值.I.e。

df = DataFrame({"id":[0,0,1,1,2,2],"flow":[1,1,1,1,1,1]})
df1 = df[df["id"]!=0].groupby('id').sum().reset_index()
pd.concat([df[df['id']==0], df1]).reset_index(drop=True)