熊猫列修改面临的问题

时间:2020-05-29 06:57:16

标签: python pandas

我正面临着一个奇怪的情况。 我有一个数据帧,其独特行的得分最高,为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代表第三最高值。如果找不到,那么我将这些空白。

请帮助我解决这个问题。

1 个答案:

答案 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值。