Pai*_*ong 3 python pandas pandas-groupby
给定一个数据帧df1,如下所示:
Col1 Col2 Col3 Col4 Col5
-------------------------------------
A 1 AA 10 Test1
A 1 AA 5 Test2
A 2 AB 30 Test3
B 4 FF 10 Test4
C 1 HH 4 Test7
C 3 GG 6 Test8
C 3 GG 7 Test9
D 1 AA 4 Test5
D 3 FF 6 Test6
Run Code Online (Sandbox Code Playgroud)
我想按Col1,Col2和Col3分组
添加新列数:每个组的大小
添加新列Col4_sum:每个组中每个Col4的总和
输出需求
Col1 Col2 Col3 Count Col4_sum
----------------------------------------
A 1 AA 2 15
A 2 AB 1 30
B 4 FF 1 10
C 1 HH 1 4
C 3 GG 2 13
D 1 AA 1 4
D 3 FF 1 6
Run Code Online (Sandbox Code Playgroud)
我尝试使用
df1.groupby(['Col1','Col2','Col3']).size
Run Code Online (Sandbox Code Playgroud)
但仅获得“计数”列。
GroupBy.agg与元组一起使用以指定具有新列名称的聚合函数:
df = (df1.groupby(['Col1','Col2','Col3'])['Col4']
.agg([('Count','size'), ('Col4_sum','sum')])
.reset_index())
print (df)
Col1 Col2 Col3 Count Col4_sum
0 A 1 AA 2 15
1 A 2 AB 1 30
2 B 4 FF 1 10
3 C 1 HH 1 4
4 C 3 GG 2 13
5 D 1 AA 1 4
6 D 3 FF 1 6
Run Code Online (Sandbox Code Playgroud)
在熊猫0.25+中可以使用named aggregation:
df = (df1.groupby(['Col1','Col2','Col3'])
.agg(Count=('Col5', 'size'), Col4_sum=('Col4', 'sum'))
.reset_index())
print (df)
Col1 Col2 Col3 Count Col4_sum
0 A 1 AA 2 15
1 A 2 AB 1 30
2 B 4 FF 1 10
3 C 1 HH 1 4
4 C 3 GG 2 13
5 D 1 AA 1 4
6 D 3 FF 1 6
Run Code Online (Sandbox Code Playgroud)
您可以使用列名和聚合函数的字典。请参阅https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.aggregate.html
>>> df = pd.DataFrame([[1, 2, 3],
... [4, 5, 6],
... [7, 8, 9],
... [np.nan, np.nan, np.nan]],
... columns=['A', 'B', 'C'])
>>> df.agg({'A' : ['sum', 'min'], 'B' : ['min', 'max']})
# A B
# max NaN 8.0
# min 1.0 2.0
# sum 12.0 NaN
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |