Python 条件聚合
我想根据'id'对下面的数据帧进行分组,然后对'id'的所有值(0除外)进行'flow'的合计;他们应该保持独立。最好的解决方案是什么 原件: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 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)