我有一个看起来像下面的数据框。
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
答案 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。