【发布时间】:2021-03-10 09:41:10
【问题描述】:
我正在尝试将几个混合数据帧(有时存在于其他数据帧中的一些缺失值)合并到一个组合数据集中,某些数据帧也可能包含额外的列,然后应该添加这些列,并且所有其他行都将 NaN 作为值。
这基于一列或几列,行索引没有意义,真正的数据集有很多列,因此手动删除任何内容都非常不理想。
因此,本质上,基于一列或多列合并多个数据帧,优先考虑任何非 NaN 值,或者如果存在两个冲突的非 NaN 值,则优先考虑基础数据帧中的现有值,而不是要合并的值。
df1 = pd.DataFrame({
'id': [1, 2, 4],
'data_one': [np.nan, 3, np.nan],
'data_two': [4, np.nan, np.nan],
})
id data_one data_two
0 1 NaN 4.0
1 2 3.0 NaN
2 4 NaN NaN
df2 = pd.DataFrame({
'id': [1, 3],
'data_one': [8, np.nan],
'data_two': [np.nan, 4],
'data_three': [np.nan, 100]
})
id data_one data_two data_three
0 1 8.0 NaN NaN
1 3 NaN 4.0 100.0
# Desired result
res = pd.DataFrame({
'id': [1, 2, 3, 4],
'data_one': [8, 3, np.nan, np.nan],
'data_two': [4, np.nan, 4, np.nan],
'data_three': [np.nan, np.nan, 100, np.nan],
})
id data_one data_two data_three
0 1 8.0 4.0 NaN
1 2 3.0 NaN NaN
2 3 NaN 4.0 100.0
3 4 NaN NaN NaN
到目前为止,我一直在尝试的功能是pd.merge()、pd.join()、pd.combine_first(),但都没有成功,可能遗漏了一些简单的东西。
【问题讨论】: