【发布时间】:2020-12-23 19:20:57
【问题描述】:
给定一列,我想对数据框中的行进行分组。然后我想收到一个编辑过的数据框,我可以决定哪个聚合函数有意义。默认值应该只是组中第一个条目的值。
(如果解决方案也适用于两列的组合,那就太好了)
示例
#!/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)
给出数据框:
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
我想得到:
amount id name price
3 1 anna 130
30 2 bob 42
110 3 charlie 3
所以:
-
id列中具有相同值的条目属于一起。在该操作之后,应该仍然有一个id列,但它应该只有唯一值。 - 将
amount和price中具有相同id的所有值相加 - 对于
name,仅采用第一个(按数据帧的当前顺序)。
Pandas 可以做到这一点吗?
【问题讨论】:
-
df_new = df.groupby(df['id']).aggregate({'price': 'sum', 'name': 'first', 'amount': 'sum'})有什么问题?这不适用于您的用例吗? -
哈哈哈,好吧,我没试过。我只是认为这是一个函数应该是什么样子。很高兴它意外地确实有效。我将编辑我的问题并将其作为答案。