2017-11-09 13 views
2

私は値に基づいてマージしようとしているデータがあります。時間の経過とともに、命名規則が変更され、同じデータをキャプチャする2つのカラムにつながるカラム名に「0」が追加されました。例:?私はどちらか(あるいは両方)が1に等しい場合、結果は1になり、両方の場合にのみ、両方が0だった、結果は0になるような方法でこれらの列を結合する方法を値に基づいて2つのパンダの列を結合する

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 

私はこのような何かを探しています:私が試した

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 

答えて

2

あなたは

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 
を試すことができます
+0

'df4.any(1).astype(int)'も動作するはずです。または、dataframeを取得してください。 'df4.any(1).astype(int).to_frame(name = 'MSG235')' –

+0

@Vaishali私は2つ以上のカラムを持っていません。これは素晴らしいです:)私が行った唯一の変更は 'df4 ['MSG235'] =(df4 [['MSG0235'、 'MSG235']]。any(1)== 1).astype(int)'でした。私は '.any(1)'を特定の列に限定することができました。助けてくれてありがとう! –

関連する問題