繁体   English   中英

合并和求和 Pandas 行

[英]Merge and Sum Pandas Rows

我有一个 Pandas 数据框,如下所示:

date      item       amount
201901    Apple      1.03
201901    Potato     1.04
201901    Orange     1.00

我正在尝试按月查找水果和蔬菜的销售额:

date      item        amount
201901    Fruit       2.03
201901    Vegetables  1.04  

做到这一点的最佳方法是什么? 我熟悉df.groupby(['date','item'])['amount'].sum() ,但这不会有条件地结合水果和蔬菜。

一种方法是根据item的值创建另一种列type ,然后对其进行分组; 有没有更好的办法?

正如 Manakin 所说,您需要手动对您的物品进行分类。

使用item : category对构建映射字典并将其传递给series.mapseries.replace

map将更改字典中的所有项目,否则用NaN填充。 replace将查找并替换所有匹配的项目并替换它们,但不会按原样保留字典键中的项目(例如,如果数据框包含'brussel sprouts'但该键不在字典中,它会将其保留为项目姓名)。 由您决定您需要哪种行为。

这是series.map的示例:

categories = {'Apple': 'Fruit', 'Potato': 'Vegetable', 'Orange': 'Fruit'}

df['category'] = df['item'].map(categories)
summary = df.groupby(['date', 'category'])['amount'].sum().reset_index()
print(summary)

输出

     date   category  amount
0  201901      Fruit    2.03
1  201901  Vegetable    1.04

您可能应该有 2 个列表或字典,列出您认为是水果或蔬菜的内容,但是当您这样做时...

 mapping = {'Apple': 'Fruit', 'Potato': 'Vegetable', 'Orange': 'Fruit'}

这可以为您提供所需的内容,而无需添加 column ,即时计算分组:

 def grouper(row):
     return row['Item']

 group_earnings = (df.groupby(grouper))['amount'].sum().reset_index()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM