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 建议使用 update
和 set_axis
:
df.update(df.iloc[:, -4:].set_axis(df.columns[:4], axis=1), overwrite=False)
我想根据屏幕截图中给出的原则将数据框中的一部分列与另一部分合并。 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 建议使用 update
和 set_axis
:
df.update(df.iloc[:, -4:].set_axis(df.columns[:4], axis=1), overwrite=False)