【发布时间】:2021-08-18 06:44:29
【问题描述】:
我试图弄清楚如何使用 pandas 调整同一组内的一些值。
在下面的df中,我有两组(111、222);在组内,对“频率”进行排名。但是,我想将组内具有相同“频率”的“排名”调整为具有相同的“排名”(升序)。
示例:group:111,freq 1 相同,分别排在第 5 和第 6 位;但是,我想将它们调整为相同的排名(显示在 adj_rank 列中)
+-----+------+------+----------+ |编号 |频率 |排名 | adj_rank | +-----+------+------+----------+ | 111 | 1 | 5 | 5 | | 111 | 1 | 6 | 5 | | 111 | 2 | 1 | 1 | | 111 | 3 | 2 | 2 | | 111 | 4 | 3 | 3 | | 111 | 5 | 4 | 4 | | 222 | 1 | 2 | 2 | | 222 | 2 | 1 | 1 | | 222 | 3 | 4 | 4 | | 222 | 3 | 5 | 4 | | 222 | 4 | 3 | 3 | | 222 | 5 | 6 | 6 | +-----+------+------+----------+df 的代码
import pandas as pd
import numpy as np
data = {'id':[111,111,111,111,111,111,
222,222,222,222,222,222],
'freq':[1,1,2,3,4,5,
1,2,3,3,4,5],
'rank':[5,6,1,2,3,4,
2,1,4,5,3,6],
'adj_rank':[5,5,1,2,3,4,
2,1,4,4,3,6]}
df = pd.DataFrame(data)
感谢@Anurag Dabas 的建议,但是,当我扩展 df 时,使用您提供的解决方案时结果将关闭。如果你看下面的df,使用你提供的代码时,adj_rank(第一行)显示11,但是正确的值应该是4。请指教,谢谢。 扩展df:
╔═════╦══════╦══════╦══════════╗ ║ id ║ freq ║ rank ║ adj_rank ║ ╠═════╬══════╬══════╬══════════╣ ║ 333 ║ 1 ║ 11 ║ 11 ║ ║ 333 ║ 2 ║ 1 ║ 1 ║ ║ 333 ║ 2 ║ 2 ║ 1 ║ ║ 333 ║ 1 ║ 5 ║ 4 ║ ║ 333 ║ 1 ║ 6 ║ 4 ║ ║ 333 ║ 1 ║ 7 ║ 4 ║ ║ 333 ║ 1 ║ 8 ║ 4 ║ ║ 333 ║ 1 ║ 9 ║ 4 ║ ║ 333 ║ 3 ║ 3 ║ 3 ║ ║ 333 ║ 3 ║ 4 ║ 3 ║ ║ 333 ║ 1 ║ 10 ║ 4 ║ ╚═════╩══════╩══════╩══════════╝扩展的df代码:
data = {'id':[333,333,333,333,333,333,
333,333,333,333,333],
'freq':[1,2,2,1,1,1,
1,1,3,3,1],
'rank':[11,1,2,5,6,7,8,
9,3,4,10,]}
df = pd.DataFrame(data)
非常感谢问候
【问题讨论】:
标签: python pandas dataframe pandas-groupby