我有以下数据框
df
A B C D
1 2 NA 3
2 3 NA 1
3 NA 1 2
A,B,C和D是问题的答案。基本上,受访者将答案从1到3排名,这意味着一行不能有两个相同的值。我正在尝试创建一个新列,该列是对前三项内容的总结,例如。
1st 2nd 3rd
A B D
D A B
C D A
这种格式将使我更容易得出结论,例如,这是第三个最佳答案。
我没有找到任何办法。请问你能帮帮我吗? 非常感谢你!
答案 0 :(得分:2)
一种方法是使用argsort
并为列编制索引:
pd.DataFrame(df.columns[df.values.argsort()[:,:-1]],
columns=['1st', '2nd', '2rd'])
1st 2nd 2rd
0 A B D
1 D A B
2 C D A
答案 1 :(得分:0)
另一种方法是使用stack()/pivot()
:
(df.stack().astype(int)
.reset_index(name='val')
.pivot('level_0', 'val', 'level_1')
)
输出:
val 1 2 3
level_0
0 A B D
1 D A B
2 C D A