我有兩個資料框:df1 大約有 20000 行,df2 有 7226 行,如圖所示:
df1:

df2:

如果兩個資料幀具有相同的 Review_Text 值,我想將 df2 的“最終編碼”值復制到 df1 的“最終編碼”值。我使用了以下命令:
df1.loc[df1['Review_Text'].isin(df2['Review_Text'],'Final Coding'] = df2['Final Coding']
上述陳述句的問題在于它沒有替換 df1 的所有值。它只替換 df1 索引號為 7226 之前的值,之后不替換任何值。我嘗試了另一個命令,如下所示:
mask = df1['Review_Text'].isin(df2['Review_Text'])==True
df1['Final Coding'] = df1['Final Coding'].where(~mask,df2['Final Coding'],axis=0)
但最終遇到了同樣的問題。我搜索了stackoverflow的現有執行緒并找到了另一種方法。所以我改變了命令如下:
df1.loc[df1['Review_Text'].isin(df2.set_index('Review_Text').index),'Final Coding'] = df2.set_index('Review_Text')['Final Coding']
但是,上面的命令拋出了以下錯誤:
ValueError: cannot reindex from a duplicate axis
“Review_Text”列中有一些重復的文本,這就是它拋出此錯誤的原因。我不知道如何克服這個問題。有人能幫我解決這個問題嗎?
uj5u.com熱心網友回復:
你可以做
在下面更新之前:
df1.reset_index(inplace=True, drop=True)
df2.reset_index(inplace=True, drop=True)
#==================================
m = df1['Review_Text'].isin(df2['Review_Text'])
v = df1['Review_Text'].map(df2.set_index('Review_Text')['Final Coding'])
df1.loc[m,'Final Coding'] = v
或者我們可以做
df1.update(df1['Review_Text'].map(df2.set_index('Review_Text')['Final Coding']).to_frame('Review_Text'))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/390761.html
