Vic*_*nte 7 pandas pandas-groupby
假设我有以下df。
df = pd.DataFrame({
'A':['x','y','x','y'],
'B':['a','b','a','b'],
'C':[1,10,100,1000],
'D':['w','v','v','w']
})
A B C D
0 x a 1 w
1 y b 10 v
2 x a 100 v
3 y b 1000 w
Run Code Online (Sandbox Code Playgroud)
我想按A和B列分组,对C列求和,并保留D的值,该值与C的最大分组值在同一行。
A B C D
x a 101 v
y b 1010 w
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有这个:
df.groupby(['A','B']).agg({'C':sum})
A B C
x a 101
y b 1010
Run Code Online (Sandbox Code Playgroud)
我必须使用什么功能汇总D列?
您可以使用DataFrameGroupBy.idxmax为最大值的指标C有loc:
#unique index
df.reset_index(drop=True, inplace=True)
df1 = df.groupby(['A','B'])['C'].agg(['sum', 'idxmax'])
df1['idxmax'] = df.loc[df1['idxmax'], 'D'].values
df1 = df1.rename(columns={'idxmax':'D','sum':'C'}).reset_index()
Run Code Online (Sandbox Code Playgroud)
类似的解决方案map:
df1 = df.groupby(['A','B'])['C'].agg(['sum', 'idxmax']).reset_index()
df1['idxmax'] = df1['idxmax'].map(df['D'])
df1 = df1.rename(columns={'idxmax':'D','sum':'C'})
Run Code Online (Sandbox Code Playgroud)
print (df1)
A B C D
0 x a 101 v
1 y b 1010 w
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1388 次 |
| 最近记录: |