我试图弄清楚如何使用pandas groupby。
我的数据框看起来像这样
index ID Code Quantity
0 400 ZU 5000
1 400 ZO 12
2 401 ZU 9000
3 401 ZO 15
4 402 ZU 1000
5 403 ZO 15
我想对ID和代码进行分组,并创建一个额外的列,该列将ZO的数量除以ZO的数量,但前提是groupby有两个条目。如果丢失,可以删除数据。
我知道我可以对多个列进行分组,例如:
data.groupby(['ID', 'Code'])
但是我不知道如何从那里开始,因为我不需要
.sum()
或.mean()
求值。预期的输出可能是这样的:
index ID value
0 400 416.17
1 401 600
最佳答案
严格来说,这里不需要groupby
。您可以过滤数据框并使用set_index
创建两个映射。然后一个除以另一个,并删除空值。
zu = df.loc[df['Code'] == 'ZU'].set_index('ID')['Quantity']
zo = df.loc[df['Code'] == 'ZO'].set_index('ID')['Quantity']
res = (zu / zo).dropna().reset_index()
print(res)
ID Quantity
0 400 416.666667
1 401 600.000000