【问题标题】:Combining two pandas columns with based on values结合基于值的两个熊猫列
【发布时间】:2018-04-23 00:06:22
【问题描述】:

我有一些数据正在尝试根据值进行合并。随着时间的推移,命名约定发生了变化,“0”被添加到列名中,导致两列捕获相同的数据;示例:

df4 = pd.DataFrame({'MSG235': [1,0,1,0,0], 'MSG0235': [0,0,0,1,1]})

df4

MSG0235  MSG235
   0       1 
   0       0 
   0       1 
   1       0 
   1       0 

我将如何组合这些列,如果其中一个(或两个)等于 1,则结果为 1,如果两者且只有两个都为 0,则结​​果为 0?

我正在寻找这样的东西:

 MSG235
   1 
   0 
   1 
   1 
   1 

我试过了:

df4.rename(columns = {'MSG0235': 'MSG235'}, inplace = True)

def col_join(x): 
    return ''.join(x[x.notnull()].astype(str))

df4.groupby(level = 0, axis = 1).apply(lambda x: x.apply(col_join, axis = 1))

结果:

MSG235
  01 
  00 
  01 
  10 
  10 

【问题讨论】:

    标签: python-3.x pandas join


    【解决方案1】:

    你可以试试

    df4['MSG235'] = (df4.any(1) == 1).astype(int)
    df4.drop('MSG0235', axis = 1, inplace = True)
    
        MSG235
    0   1
    1   0
    2   1
    3   1
    4   1
    

    【讨论】:

    • df4.any(1).astype(int) 也应该可以工作。或者获取数据框,df4.any(1).astype(int).to_frame(name='MSG235')
    • @Vaishali 我忽略了我有不止两列。不过这很好用 :) 我所做的唯一更改是 df4['MSG235'] = (df4[['MSG0235', 'MSG235']].any(1) == 1).astype(int),这样我就可以将 .any(1) 限制在特定的列中。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2021-05-29
    • 2017-05-17
    • 2013-06-01
    • 1970-01-01
    • 2014-10-20
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多