merge/concatenate x columns with x columns in the same dafarame

merge/concatenate x columns with x columns in the same dafarame

我想根据屏幕截图中给出的原则将数据框中的一部分列与另一部分合并。 pd.concat、pd.merge函数我都试过了,但我不能这样调整。下面我发布了数据框的一部分。 我想要的目标是,当两部分都有结果时,它将 select 根据条件选择其中之一。

            ('C1Cs')    ('C1Co')    ('C1Cg')    ('C1Cmp')   ('C1Xs')    ('C1Xobs')  ('C1Xg')    ('C1Xmp')
HERS00GBR   38.05       684.0       3.2         0.0         Nan         Nan         Nan         Nan
HUEG00DEU   Nan         Nan         Nan         Nan         46.26       27372.9     96.9        0.0
JFNG00CHN   43.19       2879.5      0.4         0.0         43.17       27143.9     31.6        0.0
JOZE00POL   40.03       645.0       4.8         0.0         Nan         Nan         Nan         Nan
KIR000SWE   33.66       727.5       4.7         0.0         Nan         Nan         Nan         Nan
KIRU00SWE   33.12       827.5       34.2        0.0         Nan         Nan         Nan         Nan

一个选项是combine_first(或fillna)左边部分与右边部分。

为此,您需要切片并重命名 right-hand 列:

half = len(df.columns)//2
rename_dic = dict(zip(df.columns[half:], df.columns[:half]))
out = df.iloc[:, :half].combine_first(df.iloc[:, half:].rename(columns=rename_dic))

输出:

          ('C1Cs') ('C1Co') ('C1Cg') ('C1Cmp')
HERS00GBR    38.05    684.0      3.2       0.0
HUEG00DEU    46.26  27372.9     96.9       0.0
JFNG00CHN    43.19   2879.5      0.4       0.0
JOZE00POL    40.03    645.0      4.8       0.0
KIR000SWE    33.66    727.5      4.7       0.0
KIRU00SWE    33.12    827.5     34.2       0.0

注意。首先,确保 NaN 是真正的 NaN 而不是 'Nan' 字符串:df = df.replace('Nan', float('nan'))

如果你想 就地 修改你的数据框(即没有输出,但直接修改你的输入数据框),@JonClements 建议使用 updateset_axis:

df.update(df.iloc[:, -4:].set_axis(df.columns[:4], axis=1), overwrite=False)