首页 > 解决方案 > 用数据框中组的平均值替换列值

问题描述

我有一个 DataFrame 作为

Page    Line    y
1        2      3.2
1        2      6.1
1        3      7.1
2        4      8.5
2        4      9.1

我必须用组中的平均值替换 y 列。我可以使用此代码使用一列进行分组。

df['y'] = df['y'].groupby(df['Page'], group_keys=False).transform('mean') 

我试图通过“页”和“行”的组来替换 y 的值。像这样的东西,

Page    Line    y
1        2      4.65
1        2      4.65
1        3      7.1
2        4      8.8
2        4      8.8

我在这个网站上搜索了很多答案,但找不到这个应用程序。将 python3 与熊猫一起使用。

标签: pythonpython-3.xpandas

解决方案


您需要列名列表,groupby参数by

by:映射、函数、标签或标签列表

用于确定 groupby 的组。如果 by 是一个函数,它会在对象索引的每个值上调用。如果传递了 dict 或 Series,则 Series 或 dict VALUES 将用于确定组(Series 的值首先对齐;请参阅 .align() 方法)。如果传递了 ndarray,则按原样使用这些值来确定组。一个标签或标签列表可以通过 self 中的列传递给 group。请注意,元组被解释为(单个)键。

df['y'] = df.groupby(['Page', 'Line'])['y'].transform('mean') 
print (df)
   Page  Line     y
0     1     2  4.65
1     1     2  4.65
2     1     3  7.10
3     2     4  8.80
4     2     4  8.80

您的解决方案应更改为这种语法糖 - 在列表中传递系列:

df['y'] = df['y'].groupby([df['Page'], df['Line']]).transform('mean') 

推荐阅读