我意识到这里已经解决了这个问题(例如,pandas:用列表值字典中的键和值替换列值,如果列值在字典值(列表)中,则用字典键替换列值)。然而,我希望这个问题是不同的。
如果列值存在于dictionary
的list values
中,我想用key
替换dataframe
COl
中的值
示例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