【发布时间】:2022-01-24 02:51:51
【问题描述】:
我有两个数据框:df1 大约有 20000 行,df2 有 7226 行,如图所示:
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”列中有一些重复的文本,这就是它引发此错误的原因。 我不确定如何克服这个问题。谁能帮我解决这个问题?
【问题讨论】:
-
独一无二?
-
@Abel 对不起,我不明白???
-
鬼鬼祟祟的玩笑。听起来您想将 df2 转换为查找,但它多次出现您想要使用的键值对。可以为您的键(和值)创建一个 df,然后运行唯一的并提取相关的用于查找。或者可以做类似stackoverflow.com/a/67343461/14237276 的事情来通过分组来减少它。
标签: python python-3.x pandas