首页 > 解决方案 > 为什么我的 groupby 为“产品”列返回不正确的值?

问题描述

我试图将每个用户支付的最高价格以及购买的产品放入数据帧中。当我运行下面的代码时,它返回的正是我所期望的,但“产品”列不正确。

原始数据:

df = pd.DataFrame([[123,'xt23',20],
                   [123,'q45',2],
                   [123,'a89',25],
                   [77,'q45',3],
                   [77,'a89',30],
                   [92,'xt23',24],
                   [92,'m33',60],
                   [92,'a89',28]], columns=['userid','product','price'])
df

生成这个原始数据帧:

    userid  product price
0   123     xt23    20
1   123     q45     2
2   123     a89     25
3   77      q45     3
4   77      a89     30
5   92      xt23    24
6   92      m33     60
7   92      a89     28

这是行不通的:

df.groupby('userid').max()

预期输出:

userid  product price   
77      a89     30
92      m33     60
123     a89     25

实际输出:

userid  product price   
77      q45     30
92      xt23    60
123     xt23    25

产品列中的值不正确。如果我将“产品”添加到 groupby,最高价格仍然正确,但我只想看到每个用户的一个价格和产品。我也尝试设置 numeric_only=True 但这并没有解决问题。

有谁知道为什么产品价值与原始数据不一致?

标签: pythonpandas

解决方案


使用它可以有效地获得所需的输出。

idx = df.groupby(['userid'])['price'].transform(max) == df['price']
print(df[idx])

推荐阅读