我面临着一个奇怪的场景。 我有一个数据框,其中唯一行的 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代表第三高值。如果没有找到,那么我会将这些空白。
请帮我解决这个问题。
最佳答案
使用GroupBy.cumcount
对于计数器,创建 MultiIndex
并按 Series.unstack
reshape 形状:
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 值。
关于python - panda栏修改面临的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62080329/