我有这样的数据集:
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做到这一点的正确方法,因为这些方法似乎总是在组内应用,但不适用于它们。
答案 0 :(得分:6)
首先使用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
我使用method='first'
的{{1}}参数来处理groupby.rank
组内重复评级的情况。如果在您的数据集中不可能,则可以省略它,但如果您离开它并且没有重复,则不会更改输出。