Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将两列与基于值的组合_Python 3.x_Pandas_Join - Fatal编程技术网

Python 3.x 将两列与基于值的组合

Python 3.x 将两列与基于值的组合,python-3.x,pandas,join,Python 3.x,Pandas,Join,我有一些数据,我正试图根据值合并。随着时间的推移,命名约定发生了变化,列名中添加了“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,结果将

我有一些数据,我正试图根据值合并。随着时间的推移,命名约定发生了变化,列名中添加了“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 
你可以试试

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['msg035','MSG235']].any(1)==1.astype(int)
,这样我就可以将
.any(1)
限制在特定的列中。谢谢你的帮助!