Python 条件聚合

Python 条件聚合,python,pandas,aggregation,Python,Pandas,Aggregation,我想根据'id'对下面的数据帧进行分组,然后对'id'的所有值(0除外)进行'flow'的合计;他们应该保持独立。最好的解决方案是什么 原件: id flow 0 1 0 1 1 1 1 1 2 1 2 1 合计: id flow 0 1 0 1 1 2 2 2 一种方法是使用transform重新分配新的流值,然后删除重复项: In [48]: df.loc[df['id'] != 0, 'flow'] = df.groupby('id'

我想根据'id'对下面的数据帧进行分组,然后对'id'的所有值(0除外)进行'flow'的合计;他们应该保持独立。最好的解决方案是什么

原件:

id  flow
0   1
0   1
1   1
1   1
2   1
2   1
合计:

id  flow
0   1
0   1
1   2   
2   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

您可以将此问题分解为这样一个问题:您正在对除0之外的所有ID进行分组,然后只追加0的值。即

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)