【问题标题】:pandas dataframe split on condition熊猫数据框按条件拆分
【发布时间】:2017-05-08 20:05:52
【问题描述】:

我是 pandas 的新手,如果我听起来太天真,请原谅。我有两个数据框 df1 和 df2,

df1 = pd.DataFrame({'key1': ['K0', 'K1', 'K2', 'K3'],
               'key2': ['K5', 'K4', 'K5', 'K4']})

df2 = pd.DataFrame({'key1': ['K0', 'K1', 'K2', 'K3', 'K9', 'K8', 'K7'],
                   'key2': ['K5', 'K6', 'K5', 'K4', 'K6', 'K4', 'K5'],
                     'A':['1', '2', '3', '4', '5', '6', '7'],
                     'B':['8', '9', '10', '11', '12', '13', '14']})

我想将 df2 合并到 df1 上

final = df1.merge(df2, on=['key1', 'key2'], how='left')

然后将 df2 中的剩余值作为一个数据帧。

任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    IIUC 你需要外连接参数indicator,然后用boolean indexing分割:

    final = df1.merge(df2, how='outer', indicator=True)
    print (final)
      key1 key2    A    B      _merge
    0   K0   K5    1    8        both
    1   K1   K4  NaN  NaN   left_only
    2   K2   K5    3   10        both
    3   K3   K4    4   11        both
    4   K1   K6    2    9  right_only
    5   K9   K6    5   12  right_only
    6   K8   K4    6   13  right_only
    7   K7   K5    7   14  right_only
    
    print (final[final._merge == 'right_only'])
      key1 key2  A   B      _merge
    4   K1   K6  2   9  right_only
    5   K9   K6  5  12  right_only
    6   K8   K4  6  13  right_only
    7   K7   K5  7  14  right_only
    
    print (final[final._merge != 'right_only'])
      key1 key2    A    B     _merge
    0   K0   K5    1    8       both
    1   K1   K4  NaN  NaN  left_only
    2   K2   K5    3   10       both
    3   K3   K4    4   11       both
    

    print (final[final._merge == 'right_only'].drop('_merge', axis=1))
      key1 key2  A   B
    4   K1   K6  2   9
    5   K9   K6  5  12
    6   K8   K4  6  13
    7   K7   K5  7  14
    
    print (final[final._merge != 'right_only'].drop('_merge', axis=1))
      key1 key2    A    B
    0   K0   K5    1    8
    1   K1   K4  NaN  NaN
    2   K2   K5    3   10
    3   K3   K4    4   11
    

    【讨论】:

    • 如果输出与您的需要不同,您可以编辑问题并添加所需的输出吗?谢谢。
    • 这完美地回答了我的问题。非常感谢,我忽略了指标标志的重要性。
    猜你喜欢
    • 2019-05-15
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 2013-06-23
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    相关资源
    最近更新 更多