【问题标题】:Python/Pandas - How can I keep ONLY the parent dataframe of an outer join?Python/Pandas - 我怎样才能只保留外连接的父数据框?
【发布时间】:2020-05-19 06:51:16
【问题描述】:

实际数据有更多的字段,在 df1 上更少,在 df2 上更多。有些列的名称略有不同。

# intialise data of lists.
data1 = {'NameA':['Tom', 'Nick', 'Krish', 'Jack'],
        'AgeA':[20, 21, 19, 18]}
data2 = {'NameB':['Tom', 'Nick', 'C', 'D'],
        'AgeB':[20, 21, 3, 4]}

# Create DataFrame
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
list = [df1, df2]

df1 = pd.merge(df1,df2,how='left',left_on=['NameA','AgeA'],right_on=['NameB','AgeB'])
print(df1)

输出 =

   NameA  AgeA NameB  AgeB
0    Tom    20   Tom  20.0
1   Nick    21  Nick  21.0
2  Krish    19   NaN   NaN
3   Jack    18   NaN   NaN

预期 =

我在实现左连接时遇到了麻烦,只留下了 Pandas/Python 的父表。有没有人有一些指示?谢谢。

【问题讨论】:

    标签: python pandas dataframe join merge


    【解决方案1】:

    merge 中使用left join 和参数indicator 的解决方案:

    df3 = pd.merge(df1,df2,how='left',left_on=['NameA','AgeA'],right_on=['NameB','AgeB'], indicator=True)
    print(df3)
       NameA  AgeA NameB  AgeB     _merge
    0    Tom    20   Tom  20.0       both
    1   Nick    21  Nick  21.0       both
    2  Krish    19   NaN   NaN  left_only
    3   Jack    18   NaN   NaN  left_only
    
    df = df3.loc[df3['_merge'].eq('left_only'), df1.columns]
    print (df)
       NameA  AgeA
    2  Krish    19
    3   Jack    18
    

    外连接解决方​​案:

    df3 = pd.merge(df1,df2,how='outer',left_on=['NameA','AgeA'],right_on=['NameB','AgeB'], indicator=True)
    print(df3)
       NameA  AgeA NameB  AgeB      _merge
    0    Tom  20.0   Tom  20.0        both
    1   Nick  21.0  Nick  21.0        both
    2  Krish  19.0   NaN   NaN   left_only
    3   Jack  18.0   NaN   NaN   left_only
    4    NaN   NaN     C   3.0  right_only
    5    NaN   NaN     D   4.0  right_only
    
    df = df3.loc[df3['_merge'].eq('left_only'), df1.columns]
    print (df)
       NameA  AgeA
    2  Krish  19.0
    3   Jack  18.0
    

    【讨论】:

    • 啊,我的意思是左外连接,但你明白了问题的要点。谢谢!
    • @Anonymous - 谢谢,很高兴为您提供帮助。不要忘记接受答案,如果它适合你! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多