我正面临着一个奇怪的情况。 我有一个数据帧,其独特行的得分最高,为3:
id rid code score
1 9 67 43
1 8 87 22
1 4 32 20
2 3 56 43
3 10. 22 100
3. 5 67. 50
此处的id列相同,但按行不同。
我想像这样制作数据框:
id first_code second_code third_code
1 67 87 32
2. 56. none. none
3 22. 67. none
所以我的数据框显示了最高的前3个得分。如果没有前3个值,我就是前2个或唯一的分数。因此,根据得分值,我想将代码列重新排列为三个不同的列,例如示例first_code代表最高分数,second_score代表第二最高分数,third_code代表第三最高值。如果找不到,那么我将这些空白。
请帮助我解决这个问题。
答案 0 :(得分:2)
使用GroupBy.cumcount
作为计数器,创建MultiIndex
并通过Series.unstack
进行整形:
df = df.set_index(['id',df.groupby('id').cumcount()])['code'].unstack()
df.columns=['first_code', 'second_code', 'third_code']
df = df.reset_index()
print (df)
id first_code second_code third_code
0 1.0 67.0 87.0 32.0
1 2.0 56.0 NaN NaN
2 3.0 22.0 67.0 NaN
顺便说一句,cumcount
也应在以前的代码中用于过滤top3值。