合并同一 pandas 数据框中的两列

Lan*_*ith 0 python merge dataframe pandas

我有一个数据框,其中包含必须合并的多对列。这些列包含互斥的数据。也就是说,如果 A 列中有值,则 B 列中该行的值将为空。

df = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
               'A': ['A0', '', 'A2', ''],
               'B': ['', 'B1', '', 'B3'],
               'C': ['C1','C2','',''],
               'D': ['','','D3','D4']})
Run Code Online (Sandbox Code Playgroud)

所以我有这样的事情:

    A   B   C   D key
0  A0      C1      K0
1      B1  C2      K1
2  A2          D3  K2
3      B3      D4  K3
Run Code Online (Sandbox Code Playgroud)

我想合并列 A 和 B,以便所有值最终都在 A 列中。我还想执行此表单 C 和 D,同时保持索引和任何其他列(例如 Key)不变。我可以分多个步骤完成此操作。我不需要同时进行AB合并和CD合并。理想情况下,我最终会得到:

    A   C key
0  A0  C1  K0
1  B1  C2  K1
2  A2  D3  K2
3  B3  D4  K3
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了df = df.A.combine_first(df.B),但这对我毫无帮助。

Flo*_*oor 5

这是使用 zip 匹配每两列的解决方案

li = zip(df.columns[0::2],df.columns[1::2])
#[('A', 'B'), ('C', 'D')] 
# I assume columns are pairs and end up with lenght as odd number with additional column.
# If you want to ignore last column manually you can use 
# li = zip(df.columns[0:-1:2],df.columns[1:-1:2]) # slice `start:end:step`

temp = pd.DataFrame({i :df[i]+df[j] for i,j in li})

ndf = pd.concat([temp,df['key']],1)

#    A   C key
# 0  A0  C1  K0
# 1  B1  C2  K1
# 2  A2  D3  K2
# 3  B3  D4  K3
Run Code Online (Sandbox Code Playgroud)