根据熊猫条件计算列平均值



我有一个pandas数据帧,它有3列和几行,除了一个值之外,它们几乎是重复的。我的目标是合并这些行,创建一个新列,并计算不同值的平均值。

这里有一个例子:

names subject value
A       X      5
A       X      10
A       X      15
A       Y      17
A       Y      19
A       Y      11
B       P      7
B       P      9
B       P      15
B       P      18
B       Q      0
B       Q      13
B       Q      17

这是我想要的:

names subject value  average
A       X      5    |   
A       X      10   |-> 30/3 = 10
A       X      15   |
A       Y      17   |
A       Y      19   |-> 47/3 = 15.67
A       Y      11   |
B       P      7    |
B       P      9    |-> 49/4 = 12.25
B       P      15   |
B       P      18   |
B       Q      0    |
B       Q      13   |-> 30/3 = 10
B       Q      17   |

您可以使用.groupby().mean(),然后按.rename()重命名列,如下所示:

df2 = df.groupby(['names', 'subject'], as_index=False)['value'].mean().rename({'value': 'average'}, axis=1)

结果:

print(df2)
names subject    average
0     A       X  10.000000
1     A       Y  15.666667
2     B       P  12.250000
3     B       Q  10.000000

您可以将索引设置为名称,然后按主题分组并应用平均值。这会给你平均值。然后,您可以使用列表理解来添加该列。

df['mean'] = [df.set_index('names').groupby('subject').mean()['value'][subject] for subject in df['subject'] ]

最新更新