Pandas:取具有匹配值的行的平均值

Tom*_*Tom 1 python-3.x pandas

我已经尝试了论坛上发布的几种想法,但没有一个非常有效。我有一个产品标识符和价格的数据框。我已经将 df 缩小到仅同一产品在较大数据库中具有多个价格的情况。现在我想创建一个新列,该列将是给定产品的平均价格。IE:

ID          Price
ABC1        101.45
XYZ2        88.12
ABC1        99.24
XYZ2        82.99
ABC1        105.00
Run Code Online (Sandbox Code Playgroud)

我想要的输出是这样的:

ID          Price          AvgPx
ABC1        101.45         101.897
XYZ2        88.12          85.556
ABC1        99.24          101.897
XYZ2        82.99          85.556
ABC1        105.00         101.897
Run Code Online (Sandbox Code Playgroud)

我尝试过各种版本的 groupby 和 for 循环,但没有什么效果。感谢您的帮助!

sac*_*cuL 6

虽然提供的其他解决方案效果很好,但我认为transform在这里使用会产生干净、易于阅读的代码:

df['AvgPx'] = df.groupby('ID')['Price'].transform('mean')

>>> df
     ID   Price       AvgPx
0  ABC1  101.45  101.896667
1  XYZ2   88.12   85.555000
2  ABC1   99.24  101.896667
3  XYZ2   82.99   85.555000
4  ABC1  105.00  101.896667
Run Code Online (Sandbox Code Playgroud)