【问题标题】:merge in pandas and output only selected columns合并熊猫并仅输出选定的列
【发布时间】:2018-08-25 23:26:24
【问题描述】:

有没有办法在 pandas 中进行合并,限制你想看到的列?

我有什么:

df1

ID Col1 Col2 Col3 Col4
1   1    1    1    D
2   A    C    C    4
3   B    B    B    d
4   X    2    3    6

df2

ID ColA ColB ColC ColD
1   1    1    1    D
2   A    C    X    4
3   B    B    Y    d

我想要什么:

df_final

ID ColA ColB ColC ColD
1   NA   NA   NA   NA
2   A    C    X    4
3   B    B    Y    d
4   NA   NA   NA   NA

我想对两个数据框进行左连接(保留 df1 中的所有 ID),但我只想保留 df2 中的列。如果 df1 中的 Col3 是 C 或 B,我也只想要值。

以下工作,但生成的 df 包括来自两个 dfs 的所有列。 我可以添加第三行以仅查看我想要的列,但这是一个简单的示例。实际上,我有更大的数据集,并且很难手动输入我想要保留的所有列名。

df=pd.merge(df1,df2,how='left',on='ID')
df_final=df[df['Col3'].isin['C','B']]

等效的 SQL 是

create table df_final as 
select b.*
from df1 a
left join df2 b
on a.ID=b.ID
where a.Col3 in ('C','B')

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    merge 之前使用isin 条件屏蔽df1

    df1.where(df1.Col3.isin(['C', 'B']))[['ID']].merge(df2, how='left', on='ID')
    

    或者,

    df1.mask(~df1.Col3.isin(['C', 'B']))[['ID']].merge(df2, how='left', on='ID')
    

        ID ColA ColB ColC ColD
    0  NaN  NaN  NaN  NaN  NaN
    1    2    A    C    X    4
    2    3    B    B    Y    d
    3  NaN  NaN  NaN  NaN  NaN
    

    【讨论】:

      【解决方案2】:

      这应该可以解决问题

      df=pd.merge(df1[df1.Col3.isin(['C','B'])][['ID']], df2, how='left', on='ID')
      

      【讨论】:

      • 这不会产生所需的输出。 OP 想要输出 4 行,这只有 2 行。
      • 我无法想象当这个答案甚至没有产生 OP 的预期结果时如何被接受。 -1
      • @coldspeed 谢谢。我已经对我的实际数据运行了这两种方法,并且都产生了相同的行和列..hmm。你能指出应该有什么区别吗?
      • @babz 你用这个替换我的代码后保存了你的脚本吗?
      • @coldspeed,我不只是更改代码并再次运行它
      猜你喜欢
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      • 2021-01-08
      • 2019-06-29
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多