我想在给定一列的数据帧中对行进行分组.然后我想收到一个编辑过的数据框,我可以决定哪个聚合函数有意义.默认值应该只是组中第一个条目的值.
(如果解决方案也适用于两列的组合,那将是很好的)
#!/usr/bin/env python
"""Test data frame grouping."""
# 3rd party modules
import pandas as pd
df = pd.DataFrame([{'id': 1, 'price': 123, 'name': 'anna', 'amount': 1},
{'id': 1, 'price': 7, 'name': 'anna', 'amount': 2},
{'id': 2, 'price': 42, 'name': 'bob', 'amount': 30},
{'id': 3, 'price': 1, 'name': 'charlie', 'amount': 10},
{'id': 3, 'price': 2, 'name': 'david', 'amount': 100}])
print(df)
Run Code Online (Sandbox Code Playgroud)
给出数据帧:
amount id name price
0 1 1 anna 123
1 2 1 anna 7
2 30 2 bob 42
3 10 3 charlie 1
4 100 3 david 2
Run Code Online (Sandbox Code Playgroud)
我想得到:
amount id name price
3 1 anna 130
30 2 bob 42
110 3 charlie 3
Run Code Online (Sandbox Code Playgroud)
所以:
id列中具有相同值的条目属于一起.在该操作之后,应该仍然存在id列,但它应该只有唯一值.amount和得到的值price都相同idname,只采用第一个(按数据帧的当前顺序).这是熊猫的可能吗?
Mar*_*oma 14
你在找
aggregation_functions = {'price': 'sum', 'amount': 'sum', 'name': 'first'}
df_new = df.groupby(df['id']).aggregate(aggregation_functions)
Run Code Online (Sandbox Code Playgroud)
这使
price name amount
id
1 130 anna 3
2 42 bob 30
3 3 charlie 110
Run Code Online (Sandbox Code Playgroud)
对于相同的列,必须添加reindex,因为汇总依据dict:
d = {'price': 'sum', 'name': 'first', 'amount': 'sum'}
df_new = df.groupby('id', as_index=False).aggregate(d).reindex(columns=df.columns)
print (df_new)
amount id name price
0 3 1 anna 130
1 30 2 bob 42
2 110 3 charlie 3
Run Code Online (Sandbox Code Playgroud)