Skip to main content
 首页 » 编程设计

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

2025年05月04日21wuhuacong

这是从调查中收集的数据,其中有一个单选按钮可以从 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']}) 

我想以这样的数据框结束:

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']}) 

我只有大约 65,000 行数据,因此性能对我来说不是最重要的。我最感兴趣的是学习一种好的方法来做到这一点——希望它相当简单。如果 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)