如果value在键的字典中并且values作为列表,则Pandas替换value



我意识到这里已经解决了这个问题(例如,pandas:用列表值字典中的键和值替换列值,如果列值在字典值(列表)中,则用字典键替换列值)。然而,我希望这个问题是不同的。

如果列值存在于dictionarylist values中,我想用key替换dataframeCOl中的值

示例dataframe:

import pandas as pd
df = pd.DataFrame({"Col": ["Apple", "Appy", "aple","Banana", "Banaa", "Banananan", "Carrot", "Mango", "Pineapple"]})
remap_dict = {"Apple": ["Appy", "aple"],
"Banana": ["Banaa", "Banananan"]}

pandasreplace不支持key value(list):

df["Col"].replace(remap_dict, regex=True)

是否有一种方法来替换pandas数据框中的值与dictionary中的键,如果值在列表中?

所需输出:

Col
0   Apple
1   Apple
2   Apple
3   Banana
4   Banana
5   Banana
6   Carrot
7   Mango
8   Pineapple

首先使用平坦列表的字典推导式:

d1 = {x: k for k, v in remap_dict.items() for x in v}
print (d1)
{'Appy': 'Apple', 'aple': 'Apple', 'Banaa': 'Banana', 'Banananan': 'Banana'}

然后使用replace或映射map:

s = df["Col"].replace(d1)

s = df["Col"].map(d1).fillna(df['Col'])
print (s)
0        Apple
1        Apple
2        Apple
3       Banana
4       Banana
5       Banana
6       Carrot
7        Mango
8    Pineapple
Name: Col, dtype: object

最新更新