合并其中一列或另一列中缺少数据的数据框

Posted

技术标签:

【中文标题】合并其中一列或另一列中缺少数据的数据框【英文标题】:Merge Dataframes with missing data in either one or the other column 【发布时间】:2020-01-29 11:02:44 【问题描述】:

我有两个要合并的数据框(df1df2)。两个数据帧都有一个公共密钥 (id)。两个数据框都有Feature1Feature2 列。对于每个 id,属于Feature1 的数据将在df1df2 中。 Feature2 列也是如此。

我已经尝试合并这些数据帧,但不是在最终数据帧中只获得两列(三列带有 id),而是得到 Feature1_xFeature1_y,因为它将 np.nan 值识别为有效值。有没有办法只获得 Feature1Feature2 而没有 np.nan 值?

dummy_data1 = 
        'id': ['1', '2', '3', '4', '5'],
        'Feature1': [np.nan, 'C', 'E', np.nan, np.nan],
        'Feature2': ['B', np.nan, np.nan, 'H', 'J']
df1 = pd.DataFrame(dummy_data1, columns = ['id', 'Feature1', 'Feature2'])
dummy_data2 = 
        'id': ['1', '2', '3', '4', '5'],
        'Feature1': ['A', np.nan, np.nan, 'G', 'I'],
        'Feature2': [np.nan, 'D', 'F', np.nan, np.nan]
df2 = pd.DataFrame(dummy_data2, columns = ['id', 'Feature1', 'Feature2'])

我希望得到:

dummy_data12 = 
        'id': ['1', '2', '3', '4', '5'],
        'Feature1': ['A', 'C', 'E', 'G', 'I'],
        'Feature2': ['B', 'D', 'F', 'H', 'J']
df12 = pd.DataFrame(dummy_data12, columns = ['id', 'Feature1', 'Feature2'])

【问题讨论】:

【参考方案1】:

如果id 中的值在两个DataFrames 中相同,并且两个中的索引也相同:

df1.update(df2)
print (df1)
  id Feature1 Feature2
0  1        A        B
1  2        C        D
2  3        E        F
3  4        G        H
4  5        I        J

如果不确定可能的解决方案是 DataFrame.combine_first 并在两者中设置索引 id 列:

df = df1.set_index('id').combine_first(df2.set_index('id')).reset_index()
print (df)
  id Feature1 Feature2
0  1        A        B
1  2        C        D
2  3        E        F
3  4        G        H
4  5        I        J

【讨论】:

@boqueronsb - 超级好,如果我的回答有帮助,别忘了accept 它。谢谢。

以上是关于合并其中一列或另一列中缺少数据的数据框的主要内容,如果未能解决你的问题,请参考以下文章

Mysql:优化使用一列或另一列的查询

如果来自一列的数据存在于另一列中,则合并两个数据框

连接/加入/合并两个缺少一列的数据框

Drupal Views 将 2 列合并为 1?

删除同一列或连续行的另一列中具有特定值和缺失值的行

如果匹配,如何合并两个数据帧并从新列中的另一列返回数据?