这是从调查收集的数据,其中有一个单选按钮可供选择,共5个选项。该列中存储的是一个简单的1作为标志,表明已选择它。

我想最后得到一列,将列标题作为值。有人建议在我的数据框上使用IDXMAX方法,但是当我查看文档时,我真的无法弄清楚如何应用它。看起来确实对此很有用...

我有一个数据框:

 old = pd.DataFrame({'a FINSEC_SA' : [1,'NaN','NaN','NaN','NaN',1,'NaN'],
 'b FINSEC_A' : ['NaN',1,'NaN','NaN','NaN','NaN','NaN'],
 'c FINSEC_NO' : ['NaN','NaN',1,'NaN','NaN','NaN','NaN'],
 'd FINSEC_D' : ['NaN','NaN','NaN',1,'NaN','NaN',1],
 'e FINSEC_SD' : ['NaN','NaN','NaN','NaN',1,'NaN','NaN']})


python - 如何使用列标题作为填充值将Panda Dataframe从5列转换为1列?-LMLPHP

我想最后得到一个这样的数据框:

new = pd.DataFrame({'Financial Security':['a FINSEC_SA','b FINSEC_A',
'c FINSEC_NO','d FINSEC_D','e FINSEC_SD','a FINSEC_SA','d FINSEC_D']})


python - 如何使用列标题作为填充值将Panda Dataframe从5列转换为1列?-LMLPHP

我只有大约65k的数据行,因此性能对我而言并不是最重要的。我最感兴趣的是学习一种好的方法,希望这很简单。如果idxmax相当容易做到这一点,那就太好了。

最佳答案

idxmax仅适用于数字。因此,首先,我们需要将“ NaN”(字符串)转换为np.NaN(数字值)。然后,我们可以将每一列转换为数字序列:

old = old.replace('NaN', np.NaN)
old = old.apply(pd.to_numeric)


或者,您可以使用以下命令一行完成此操作:

old = old.apply(pd.to_numeric, errors='coerce')


最后,我们可以运行idxmax。您所要做的就是指定轴。 axis = 1获取每行中1的位置(最大值),axis = 0获取每列中1的位置

new = old.idxmax(axis=1)


您可以在一行中运行代码(如果您之后不需要复制旧代码):

new = old.apply(pd.to_numeric, errors='coerce').idxmax(axis=1)

关于python - 如何使用列标题作为填充值将Panda Dataframe从5列转换为1列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49404068/

10-11 20:32