关于python:Pandas groupby和聚合重复项

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

或者只是groupby之后的重量sum

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

pandas.groupby可以做到,

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

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

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