我有一些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/

10-12 21:52