熊猫groupby和汇总重复项

时间:2019-11-12 04:02:07

标签: python pandas dataframe group-by duplicates

我有一个看起来像下面的数据框。

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

在数据框中,位置的每一行应具有唯一的项目名称和相应的项目权重。但是,由于数据质量问题,有时会多次报告项目。在这种情况下,我想对多个项目的权重求和,然后显示单个项目的总权重。

结果看起来像这样

df
  location item  weight
0  canada  coke    2
1   italy  pepsi   2
2   italy  coke    1

3 个答案:

答案 0 :(得分:1)

您可以使用transform,然后删除重复项。

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 :(得分:1)

或者在sum之后简单地权重groupby

print (df.groupby(["location","item"])["weight"].sum().reset_index())
#
  location   item  weight
0   canada   coke       2
1    italy   coke       1
2    italy  pepsi       2

答案 2 :(得分:0)

pandas.groupby可以做到,

df = df.groupby(['location', 'item']).sum()
df = df.reset_index()
print(df)

结果如下:

   location   item  weight
0   canada   coke       2
1    italy   coke       1
2    italy  pepsi       2

使用df['location', 'item']的索引是groupby(['location', 'item']),然后使用reset—index可以将df的索引设置为value。

引用:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html?highlight=groupby#pandas.DataFrame.groupby