我有一个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'] ]