我有这样一个数据集:
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' 中重复评级的情况] 组。如果这在您的数据集中不可能,您可以省略它,但如果您保留它并且没有重复项,它不会更改输出。
