根据多列的值填充一列

时间:2020-04-27 14:12:20

标签: python pandas

我有以下数据框

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

这种格式将使我更容易得出结论,例如,这是第三个最佳答案。

我没有找到任何办法。请问你能帮帮我吗? 非常感谢你!

2 个答案:

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