Skip to main content
 首页 » 编程设计

python之如何在 python-pandas 中对 ACROSS 组进行平均

2025年05月04日15shanyou

我有这样一个数据集:

Participant   Type   Rating  
1              A       6 
1              A       5 
1              B       4 
1              B       3 
2              A       9 
2              A       8 
2              B       7 
2              B       6 

我想得到这个:

Type   MeanRating 
A        mean(6,9) 
A        mean(5,8) 
B        mean(4,7) 
B        mean(3,6) 

因此,对于每种类型,我想要每个组中较高值的平均值,然后是每个组中第二个较高值的平均值,等等。

我想不出用 python pandas 做这个的正确方法,因为这种方法似乎总是适用于组内,但不适用于它们。

请您参考如下方法:

第一次使用groupby.rank创建一个允许您对齐最高值、次高值等的列。然后使用新创建的列执行另一个 groupby 来计算均值:

# Get the grouping column. 
df['Grouper'] = df.groupby(['Type', 'Participant']).rank(method='first', ascending=False) 
 
# Perform the groupby and format the result. 
result = df.groupby(['Type', 'Grouper'])['Rating'].mean().rename('MeanRating') 
result = result.reset_index(level=1, drop=True).reset_index() 

结果输出:

  Type  MeanRating 
0    A         7.5 
1    A         6.5 
2    B         5.5 
3    B         4.5 

我使用 groupby.rank 的 method='first' 参数来处理 ['Type', 'Participant' 中重复评级的情况] 组。如果这在您的数据集中不可能,您可以省略它,但如果您保留它并且没有重复项,它不会更改输出。