Pandas:为每组中的唯一值插入一个数字

vzgqcmou  于 2023-02-02  发布在  其他
关注(0)|答案(1)|浏览(147)

我的数据框是:

df = pd.DataFrame({
'ID':['27637', '27637', '27637', '27637', '89283', '89283', '89283', '89283'],
'Country':['UK', 'Poland', 'Poland', 'Poland', 'China', 'China', 'India', 'India']})

我通过df['Dense_Rank'] = df.groupby('ID')['Country'].rank(method='dense')添加了一个附加列
然而,我不喜欢27637组,因为英国标记为2.0,而波兰标记为1.0。由于英国首先出现,我预计它将标记为1.0,而波兰标记为2.0。89283组看起来不错。
以下是我的预期结果:
| 识别号|国家|密集_等级|预期_结果|
| - ------|- ------|- ------|- ------|
| 小行星27637|联合 Realm |2.0版|1.0分|
| 小行星27637|波兰|1.0分|2.0版|
| 小行星27637|波兰|1.0分|2.0版|
| 小行星27637|波兰|1.0分|2.0版|
| 小行星89283|中国|1.0分|1.0分|
| 小行星89283|中国|1.0分|1.0分|
| 小行星89283|印度|2.0版|2.0版|
| 小行星89283|印度|2.0版|2.0版|

zdwk9cvp

zdwk9cvp1#

一个选项是使用pandas.factorize

df['Expected_Result'] = df.groupby(['ID'])['Country'].transform(lambda x: pd.factorize(x)[0]+1)

输出:

print(df)

      ID Country  Dense_Rank  Expected_Result
0  27637      UK         2.0                1
1  27637  Poland         1.0                2
2  27637  Poland         1.0                2
3  27637  Poland         1.0                2
4  89283   China         1.0                1
5  89283   China         1.0                1
6  89283   India         2.0                2
7  89283   India         2.0                2

相关问题