Pandas groupby and aggregate duplicates
我有一个看起来像下面的数据框。
1 2 3 4 5 6 7 8 | d = {'location': ['canada', 'canada', 'italy', 'italy'], 'item': ['coke', 'coke', 'pepsi', 'coke'], 'weight': [1, 1, 2, 1]} df = pd.DataFrame(data=d) df location item weight 0 canada coke 1 1 canada coke 1 2 italy pepsi 2 3 italy coke 1 |
在数据框中,位置的每一行应具有唯一的商品名称和相应的商品重量。但是,由于数据质量问题,有时会多次报告项目。在这种情况下,我想对多个项目的权重求和,然后显示单个项目的总权重。
结果看起来像这样
1 2 3 4 5 | df location item weight 0 canada coke 2 1 italy pepsi 2 2 italy coke 1 |
或者只是
1 2 3 4 5 6 | print (df.groupby(["location","item"])["weight"].sum().reset_index()) # location item weight 0 canada coke 2 1 italy coke 1 2 italy pepsi 2 |
您可以使用转换,然后删除重复项。
1 2 3 4 5 6 7 8 9 10 11 12 | d = {'location': ['canada', 'canada', 'italy', 'italy'], 'item': ['coke', 'coke', 'pepsi', 'coke'], 'weight': [1, 1, 2, 1]} df = pd.DataFrame(data=d) df['weight'] = df.groupby(['location', 'item']).transform('sum') df = df.drop_duplicates() df.reset_index(drop=True) Out[1]: location item weight 0 canada coke 2 1 italy pepsi 2 2 italy coke 1 |
1 2 3 | df = df.groupby(['location', 'item']).sum() df = df.reset_index() print(df) |
结果如下:
1 2 3 4 | location item weight 0 canada coke 2 1 italy coke 1 2 italy pepsi 2 |
使用
引用:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html?highlight=groupby#pandas.DataFrame.groupby