簡體   English   中英

需要幫助將合並函數從 R 轉換為 Python,生成的 df 的形狀相同但在刪除重復項后在 Python 中丟失更多行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM