有没有办法在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')
答案 0 :(得分:3)
在df1
:
isin
条件屏蔽merge
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
答案 1 :(得分:0)
这应该可以解决问题
df=pd.merge(df1[df1.Col3.isin(['C','B'])][['ID']], df2, how='left', on='ID')