Python 使用str.find()查找部分字符串,然后替换字典中的值

Python 使用str.find()查找部分字符串,然后替换字典中的值,python,pandas,Python,Pandas,我需要替换列中的值。列中的值不需要精确匹配,因此我使用str.find()。一旦它扫描了字符串,它应该替换字典中的值 我在一个实例中达到了预期的结果,但我需要多次这样做 我尝试创建一个函数,但没有成功。它只适用于最后一个字典值 dictionary = {"AA" : "111", "BB" : "222", "CC": "333,444"} #result = [] for k, v in dictionary.items(): df["renamed"] = np.nan

我需要替换列中的值。列中的值不需要精确匹配,因此我使用str.find()。一旦它扫描了字符串,它应该替换字典中的值

我在一个实例中达到了预期的结果,但我需要多次这样做

我尝试创建一个函数,但没有成功。它只适用于最后一个字典值

dictionary  = {"AA" : "111", "BB" : "222", "CC": "333,444"}

#result = []
for k, v in dictionary.items():
    df["renamed"] = np.nan
    df.loc[(df["combined_topic"].str.find(k) != -1), "renamed"] = v
    #result.extend(df["renamed"].to_dict(orient="records"))
我应该如何修复我的代码?或者您可以建议更有效的方法来替换多个值

预期产出:

combined_topic          renamed
AA, harvard                 111
Diliman, Technology, BB     222
Cat, Dog, CC, Bull          333, 444
``


用于获取字典的第一个匹配值,然后按dict:

您的解决方案应该与一起使用,但主要是删除
df[“重命名”]=np.nan
,因为每个循环中的数据总是被覆盖:

for k, v in dictionary.items():
    df.loc[df["combined_topic"].str.contains(k), "renamed"] = v
或:


请提供一些示例数据和预期输出。我已经添加了它。我无法理解你想在这里做什么。这些额外的价值观——哈佛、迪利曼、Cat等——从何而来?将它们结合起来的规则是什么?如果关键不在主题中,该怎么办?保持主题不变?这只是一个例子。我有一个来自客户端的数据帧,看起来像这样,我只是更改了值。客户端有一个组合的主题列。我只需要替换这些值。对于1个单元格,我需要扫描字符串,如果它包含字典中的内容,我需要替换它。哇,第一个比我提出的更简单,而且它工作正常!谢谢:)也谢谢你的替代方案!
for k, v in dictionary.items():
    df.loc[df["combined_topic"].str.contains(k), "renamed"] = v
for k, v in dictionary.items():
    df.loc[(df["combined_topic"].str.find(k) != -1), "renamed"] = v