Python 替换在另一个数据帧中找到的一个数据帧上的字符串的所有实例

Python 替换在另一个数据帧中找到的一个数据帧上的字符串的所有实例,python,pandas,Python,Pandas,我有一个如下所示的数据帧: 我有另一个数据框,看起来像这样 我想做的是查看第一个数据帧分辨率列与列分辨率排序是否匹配,如果匹配,我想用匹配排序中的字符串替换该字符串的所有实例 我知道一种蛮力的方法,但我想看看是否有人有一种更像蟒蛇的方法,而不是用两个for循环来做这件事 我想指出的是,在第二个数据帧中,我在resolution sort列中删除了所有重复项,因此我们在那里都有唯一的值。以下是一些效率不高的代码,我认为这些代码会起作用: for x in first_df: for y

我有一个如下所示的数据帧:

我有另一个数据框,看起来像这样

我想做的是查看第一个数据帧
分辨率
列与列
分辨率排序
是否匹配,如果匹配,我想用
匹配排序
中的字符串替换该字符串的所有实例

我知道一种蛮力的方法,但我想看看是否有人有一种更像蟒蛇的方法,而不是用两个for循环来做这件事

我想指出的是,在第二个数据帧中,我在resolution sort列中删除了所有重复项,因此我们在那里都有唯一的值。以下是一些效率不高的代码,我认为这些代码会起作用:

for x in first_df:
    for y in second_df:
        if x.loc['resolution'] == y.loc['resolution_sort']:
            first_df.replace({x.loc['resolution']: y.loc['match_sort']}, regex=True)

正如评论者所提到的,如果没有样本数据进行测试是很困难的,但是我的解决方案是通过使用连接数据帧,然后组合列match_sort和resolution

third_df = pd.merge(
    first_df, 
    second_df[['resolution_sort', 'match_sort']], 
    how='left',
    left_on='resolution',
    right_on='resolution_sort',
)

third_df['combined'] = third_df['match_sort'].combine_first(third_df['resolution'])
解决方案 你可以试试这个。我正在使用
pandas.Series.replace()
只替换匹配的事件,其余的保持不变。如果改为使用
pandas.Series.map()
,将强制非匹配变为
NAN

假设 #第一数据帧 #第二数据帧 #选项1:单线解决方案 (dfa.resolution.str.lower().replace(dict(dfb[['resolution\u sort','match\u sort']].]to_记录(index=False))) #选项2:分为多行以更清晰 (dfa.1)决议 #比较前转换为小写 .str.lower() #匹配和替换 .替换(dict( #为“匹配并替换”创建dict dfb['resolution\u sort','match\u sort']].[to\u记录(index=False) )) ) 输出

0已替换\u键盘
更换1只鼠标
2.更换鼠标
3.键盘
4.键盘
5.更换鼠标
6.键盘
7.键盘
8.更换鼠标
9.更换鼠标
更换10只鼠标
11只适用于dfa
名称:分辨率,数据类型:对象
虚拟数据
#dfa:1st数据帧(此处更新分辨率列)
分辨率=[
“替换键盘”,
“替换鼠标”,
“替换鼠标”,
“替换键盘”,
“替换键盘”,
“替换鼠标”,
“替换键盘”,
“替换键盘”,
“替换鼠标”,
“替换鼠标”,
“替换鼠标”,
“仅在dfa中”,
]
#dfb:第二个数据帧(用于查找)
分辨率\排序=[
“替换键盘”,
“替换鼠标”,
“替换鼠标”,
“仅在dfb中”,
]
匹配\u排序=[
“替换键盘”,
“替换鼠标”,
“替换鼠标”,
“只有在dfb中”,
]
#创建数据帧
dfa=pd.数据帧(dict(分辨率=分辨率))
dfb=pd.DataFrame(
口述(
分辨率排序=分辨率排序,
匹配排序=匹配排序,
)
)
输出

打印(dfa) 决议 0替换了键盘 更换1只鼠标 2更换鼠标 3更换键盘 4更换键盘 5更换鼠标 6更换键盘 7更换键盘 8更换鼠标 更换9只鼠标 更换10只鼠标 11只适用于dfa #打印(dfb) 分辨率\排序匹配\排序 0已替换键盘已替换键盘 1替换鼠标替换鼠标 2个鼠标被替换鼠标被替换 3只在dfb中只在dfb中
很好地展示了您的目标。但也请提供数据作为代码,人们可以运行并生成测试用例。这有助于人们快速回答问题,也有助于您或其他人在一组常见的虚拟数据上比较答案的相关性和质量。另外,请提及任何假设:对于第二个数据帧,列resolution_排序中的每个条目都是唯一的,在比较两列时,可能会出现大小写不匹配的情况。所以这也应该考虑进去。@CypherX感谢您的评论,这将更新我的问题。请以代码形式提供数据:而不仅仅是图像形式(它们有助于理解您需要什么,但对生成两个数据帧没有帮助)。@CypherX您知道以代码形式提供数据的最佳方式吗?如果我是您,我只需要用一些示例数据创建一个数据框架,并在这里共享代码。例如,请参见我的答案中的虚拟数据。您可以直接运行虚拟数据,然后在其上运行解决方案以进行快速验证。