python - 左加入但保持一个观察

标签 python pandas merge

我有两个表,想左合并它们。在右表上,我有多行,因此合并结果是一个更大的表。在 SQL 中,我对每个组使用 HAVING 并使用 max() 进行过滤。我不确定如何在 Pandas 中做到这一点。

决赛 table 应该是这样的:

enter image description here

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')

关于python - 左加入但保持一个观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57517802/

相关文章:

python - 如何根据三列中的顺序将三列合并为一列

python - 如何在 aws lambda/tmp 目录中运行 python 脚本

Python:如何从字典列表中创建一个 csv 字符串(无文件)?

python - 谷歌应用程序引擎。 TextProperty重置为 ""

python - 告知R包keras Python的正确位置

python - 通过采用相对于其他系列的相交索引来过滤掉一个系列

python - 在 Pandas 数据框中查找连续索引的开始和结束索引

python - 无法使用 pandas 合并两个数据框

python - 将 DataFrame 转换为字典,其中标题为键,列为带有值的数组

git - 使用子树 merge 将 Bootstrap merge 到一个 git 仓库中