繁体   English   中英

离开加入,但保持一个观察

[英]left join but keeping one observation

我有两张桌子,想要合并它们。 在右表上,我有多行,因此合并结果是一个更大的表。 在SQL中,我对每个组使用HAVING并使用max()进行过滤。 我不知道如何在熊猫中做到这一点。

决赛桌应如下:

在此输入图像描述

df1 = pd.DataFrame([['k1', 2], ['k2', 3], ['k3', 6]], columns=['A', 'B'])
df2 = pd.DataFrame([['k1', 20 , "2018-3-1"], ['k1', 30 ,"2018-3-1" ], ['k3', 60,"2018-4-1"]], columns=['A', 'C', 'Date'])
df3 = pd.merge(df1,df2[['A', 'Date']], on='A', how='left')

不工作解决方案:

df3.groupby('A').filter(lambda x: x['Date']==x['Date'].max())

我们可以使用sort_valuesdrop_duplicates

df1.merge(df2.sort_values('Date').drop_duplicates(['A'],keep='last'),on=['A'],how='left')
    A  B     C      Date
0  k1  2  30.0  2018-3-1
1  k2  3   NaN       NaN
2  k3  6  60.0  2018-4-1

或者类似于SQL

df1.merge(df2.groupby('A',as_index=False).max(),on=['A'],how='left')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM