微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从值不是NaN的多个列中创建新列

如何解决从值不是NaN的多个列中创建新列

我正在尝试从4个以相同名称开头的多列中创建一个新列。这些列中的3或4是NaN。我想让新列具有此非NaN值(如果它存在于特定行中)。否则,新列应为NaN。

开始于:

    NaN = np.NaN
    pd.DataFrame( {'process_time_1': [5,NaN,NaN],'process_time_2': [NaN,'process_time_3': [NaN,3,4],'process_time_4': [NaN,NaN]} )

如果希望新列显示为:

    NaN = np.NaN
    pd.DataFrame( {'process_time': [5,4]} )

我当前拥有的代码

    cols =  [df1.columns.str.startswith('process')]
    df1[cols][df1.notna()]

我正在打破这个观念,如果有人可以帮助您朝正确的方向发展,那将是非常棒的:) 预先感谢!

解决方法

您可以在此处使用ffill转发有效值,并保留最后一列:

df['process_time'] = df.filter(like='process').ffill(axis=1).iloc[:,-1]

print(df)
   process_time_1  process_time_2  process_time_3  process_time_4  \
0             5.0             NaN             NaN             NaN   
1             NaN             NaN             NaN             NaN   
2             NaN             NaN             3.0             NaN   
3             NaN             NaN             4.0             NaN   

   process_time  
0           5.0  
1           NaN  
2           3.0  
3           4.0  
,

您可以将SELECT *DISTINCT一起使用:

max

axis=1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。