我试图弄清楚如何使用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

10-05 23:58