gpt4 book ai didi

python-3.x - 根据元素的排名对数据框进行排序并创建新列

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

我有以下数据框:

import pandas as pd
df = pd.DataFrame(
{
'id': [1, 1, 1, 1, 2, 2,2, 2, 3, 3, 3, 3],
'name': ['A', 'B', 'C', 'D','A', 'B','C', 'D', 'A', 'B','C', 'D'],
'Value': [1, 2, 3, 4, 5, 6, 0, 2, 4, 6, 3, 5]
},
columns=['name','id','Value'])`

我可以使用 id 和 value 对数据进行排序,如下所示:
df.sort_values(['id','Value'],ascending = [True,False])  

我打印的表格将显示如下:
  name   id   Value
D 1 4
C 1 3
B 1 2
A 1 1
B 2 6
A 2 5
D 2 2
C 2 0
B 3 6
D 3 5
A 3 4
C 3 3

我想创建 4 个新列 (Rank1, Rank2, Rank3, Rank4) 如果列中的元素 姓名 是最高值,列 Rank1 将被分配为 1 否则 0 .如果列中的元素 姓名 是第二高的值,他列 Rank2 将被分配为 1 否则 0 .
Rank3 和Rank4 相同。

我怎么能那样做?

谢谢。

捷普

最佳答案

用:

df = df.join(pd.get_dummies(df.groupby('id').cumcount().add(1)).add_prefix('Rank'))
print (df)
name id Value Rank1 Rank2 Rank3 Rank4
3 D 1 4 1 0 0 0
2 C 1 3 0 1 0 0
1 B 1 2 0 0 1 0
0 A 1 1 0 0 0 1
5 B 2 6 1 0 0 0
4 A 2 5 0 1 0 0
7 D 2 2 0 0 1 0
6 C 2 0 0 0 0 1
9 B 3 6 1 0 0 0
11 D 3 5 0 1 0 0
8 A 3 4 0 0 1 0
10 C 3 3 0 0 0 1

详情 :

对于每组计数使用 GroupBy.cumcount ,然后添加 1 :
print (df.groupby('id').cumcount().add(1))
3 1
2 2
1 3
0 4
5 1
4 2
7 3
6 4
9 1
11 2
8 3
10 4
dtype: int64

对于指标列,使用 get_dumes add_prefix :
print (pd.get_dummies(df.groupby('id').cumcount().add(1)).add_prefix('Rank'))
Rank1 Rank2 Rank3 Rank4
3 1 0 0 0
2 0 1 0 0
1 0 0 1 0
0 0 0 0 1
5 1 0 0 0
4 0 1 0 0
7 0 0 1 0
6 0 0 0 1
9 1 0 0 0
11 0 1 0 0
8 0 0 1 0
10 0 0 0 1

关于python-3.x - 根据元素的排名对数据框进行排序并创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50733268/

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