[英]Need help converting a merge function from R to Python, shape of resulting df is the same but losing more rows in Python after dropping duplicates
我相信 R 中的合并类型是左外连接。 我在 Python 中实现的合并返回了一个数据帧,该数据帧与 R 中生成的合并 df 具有相同的形状。 尽管当我删除重复项 (df2.drop_duplicates) 时,Python 中删除了 4000 行,而不是应用时删除的 50 行删除重复函数到合并后的 R 数据框
我需要合并的数据框是 df1 和 df2
R:
df2<-merge( df2[ , -which(names(df2) %in% c(column9,column10))], df1[,c(column1,column2,column4,column5)],by.x=c(column1,column2),by.y=c(column2,column4),all.x=T
Python:
df2 = df2[[column1,column2,column3...column8]].merge(df1[[column1,column2,column4,column5]],how='left',left_on=[column1,column2],right_on=[column2,column4]
df2[column1] 和 df2[column2] 是我想要合并的列,因为它们在 df1 中的名称是 df1[column2] 和 df1[column4] 但具有相同的行值。
我的直觉告诉我这个问题源于我可能误解的这部分代码: -which(names(df2) %in% c(column9,column10)
如果我在某个地方搞砸了,请随时以我的方式发送一些提示
首先, 不再推荐Pandas 中列的列表子集。 相反,使用reindex
对处理缺失标签的列进行子集化。
Pandas 中-which(names(df2) %in% c(column9, column10))
的 R 翻译可以是~df2.columns.isin([column9, column10])
。 并且因为isin
返回一个布尔系列,要考虑DataFrame.loc
子集:
df2 = (df.loc[:, ~df2.columns.isin([column9, column10])]
.merge(df1.reindex([column1, column2, column4, column5], axis='columns'),
how='left',
left_on=[column1, column2],
right_on=[column2, column4])
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.