gpt4 book ai didi

python - 在 Pandas 中创建基于列的连接名称和排名

转载 作者:行者123 更新时间:2023-12-04 13:07:58 26 4
gpt4 key购买 nike

我有这个数据集,其中包含名称和计数:

df = pd.DataFrame({'Id':[1,2,3,4,5,6], 'Name':['Eve','Diana','Diana','Mia','Eve','Eve'], "Count":[10,3,14,8,5,2]})
df

Id Name Count
0 1 Eve 10
1 2 Diana 3
2 3 Diana 14
3 4 Mia 8
4 5 Eve 5
5 6 Eve 2

我想创建一个新列,它是名称加上排名的串联。所以首先我必须选择那些非唯一值并对它们进行排序:

df_nounique = df[df.duplicated(subset=['Name'], keep=False)]
df_nounique = df_nounique.sort_values(by=['Name','Count'], ascending=False)
df_nounique
Id Name Count
0 1 Eve 10
4 5 Eve 5
5 6 Eve 2
2 3 Diana 14
1 2 Diana 3

好的,现在我必须根据名称和计数分配排名:

df_nounique['rank'] = df_nounique.groupby('Name')['Count'].rank()
df_nounique
Id Name Count rank
0 1 Eve 10 3.0
4 5 Eve 5 2.0
5 6 Eve 2 1.0
2 3 Diana 14 2.0
1 2 Diana 3 1.0

但这就是我被困的地方。对于第一行,排名应该是 1,但我得到 3!。如果我做对了,我可以合并一个连接以获得这个:

    Id  Name    Count   New_col
0 1 Eve 10 Eve_1
1 2 Diana 3 Diana_2
2 3 Diana 14 Diana_1
3 4 Mia 8 Mia
4 5 Eve 5 Eve_2
5 6 Eve 2 Eve_3

看来我采取了太多步骤,所以请您至少帮助我解决我的排名问题,并为我的最终目标提供更好的方法建议?

最佳答案

使用 ascending=False 作为 rank() 的参数:

df_nounique['rank'] = df_nounique.groupby('Name')['Count'] \
.rank(ascending=False).astype(int)
>>> df_nounique
Id Name Count rank
0 1 Eve 10 1
4 5 Eve 5 2
5 6 Eve 2 3
2 3 Diana 14 1
1 2 Diana 3 2

然后:

df['New_col'] = (df_nounique['Name'] + '_' + df_nounique['rank'].astype(str)) \
.combine_first(df['Name'])
>>> df
Id Name Count New_col
0 1 Eve 10 Eve_1
1 2 Diana 3 Diana_2
2 3 Diana 14 Diana_1
3 4 Mia 8 Mia
4 5 Eve 5 Eve_2
5 6 Eve 2 Eve_3

关于python - 在 Pandas 中创建基于列的连接名称和排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68524446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com