我有一些DataFrame:
df = pd.DataFrame({'columnA': ['apple', 'apple', 'apple', 'orange', 'orange', 'orange'], 'columnB': [0.10, -0.15, 0.25, 0.50, -0.51, 0.70]})
columnA columnB
0 apple 0.10
1 apple -0.15
2 apple 0.25
3 orange 0.50
4 orange -0.51
5 orange 0.70
我试图按
columnA
的绝对值对columnB
中的每个组成员进行排名。df['rank'] = df.reindex(df['columnB'].abs().sort_values(ascending=False).index).groupby('columnA')['columnB'].rank(ascending=False)
columnA columnB rank
0 apple 0.10 2.0
1 apple -0.15 3.0
2 apple 0.25 1.0
3 orange 0.50 2.0
4 orange -0.51 3.0
5 orange 0.70 1.0
但是上面的排名并不是我想要达到的绝对值。
最佳答案
IIUC,使用pandas.Series.abs
:
df['rank'] = df['columnB'].abs().groupby(df['columnA']).rank(ascending=False)
print(df)
输出:
columnA columnB rank
0 apple 0.10 3.0
1 apple -0.15 2.0
2 apple 0.25 1.0
3 orange 0.50 3.0
4 orange -0.51 2.0
5 orange 0.70 1.0
关于python - Pandas groupby.rank的绝对值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59350533/