【问题标题】:How to merge overlapping columns如何合并重叠的列
【发布时间】:2018-01-16 10:15:49
【问题描述】:

我有两个这样的数据集

import pandas as pd
import numpy as np
df1 = pd.DataFrame({'id': [1, 2,3,4,5], 'first': [np.nan,np.nan,1,0,np.nan], 'second': [1,np.nan,np.nan,np.nan,0]})
df2 = pd.DataFrame({'id': [1, 2,3,4,5, 6], 'first': [np.nan,1,np.nan,np.nan,0, 1], 'third': [1,0,np.nan,1,1, 0]})

我想得到

result = pd.merge(df1, df2,  left_index=True, right_index=True,on='id', how= 'outer')
result['first']= result[["first_x", "first_y"]].sum(axis=1)
result.loc[(result['first_x'].isnull()) & (result['first_y'].isnull()), 'first'] = np.nan
result.drop(['first_x','first_y'] , 1)

  id    second  third   first
0   1   1.0      1.0    NaN
1   2   NaN      0.0    1.0
2   3   NaN      NaN    1.0
3   4   NaN      1.0    0.0
4   5   0.0      1.0    0.0
5   6   NaN      0.0    1.0

问题是真正的数据集包含大约 200 个变量,我的路很长。如何使它更容易?谢谢

【问题讨论】:

    标签: python pandas merge overlapping


    【解决方案1】:

    你应该可以使用combine_first:

    >>> df1.set_index('id').combine_first(df2.set_index('id'))
        first  second  third
    id                      
    1     NaN       1      1
    2       1     NaN      0
    3       1     NaN    NaN
    4       0     NaN      1
    5       0       0      1
    6       1     NaN      0
    

    【讨论】:

      【解决方案2】:

      可能应该使用 Alexander 提到的combine_first。如果您想将id 保留为一列,您只需使用:

      merged = df1.merge(df2)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-14
        • 2014-05-05
        • 1970-01-01
        • 2013-10-16
        • 2022-07-22
        • 2023-03-23
        • 1970-01-01
        • 2015-03-29
        相关资源
        最近更新 更多