用一对多字典替换或映射数据帧列中的值

2024-06-01 10:55:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe列,我需要用字典中定义的类别替换它

我使用一个字典和一个for循环,在这个循环下有if和elif语句,我用它们替换值

   dict_col = {'Red':['Light_Red','Crimson','Ferrari_Red'],'Blue:['Light_Blue','Azure_Blue','Sky_Color']}

我想知道是否有一种干净、更好的方法来实现这一点,而不是使用for循环

enter image description here


Tags: dataframeforif字典定义colbluered
3条回答

首先对交换键和值使用dict理解,然后传递到^{}

df = pd.DataFrame({'Color':['Light_Red','Crimson','Ferrari_Red',
                           'Light_Blue','Azure_Blue','Sky_Color']})
print (df)
         Color
0    Light_Red
1      Crimson
2  Ferrari_Red
3   Light_Blue
4   Azure_Blue
5    Sky_Color

dict_col = {'Red':['Light_Red','Crimson','Ferrari_Red'],
           'Blue':['Light_Blue','Azure_Blue','Sky_Color']}
            
d = {k: oldk for oldk, oldv in dict_col.items() for k in oldv}

print (d)
{'Light_Red': 'Red', 'Crimson': 'Red', 'Ferrari_Red': 'Red', 
 'Light_Blue': 'Blue', 'Azure_Blue': 'Blue', 'Sky_Color': 'Blue'}

df['Color'] = df['Color'].map(d)
print (df)
0   Red
1   Red
2   Red
3  Blue
4  Blue
5  Blue

有。您可以在pandas:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.map.html中使用map函数

但是,您希望字典是另一种方式:

完整示例:

import pandas as pd

dict_col = {'Red':['Light_Red','Crimson','Ferrari_Red'],'Blue':['Light_Blue','Azure_Blue','Sky_Color']}
dict_col = {val: k for k, l in dict_col.items() for val in l}
df = pd.DataFrame(("Light_Red", 'Light_Blue'), columns=["Colors"])
df["Colors"].map(dict_col)

当更改字典的结构时,它会更简单一些:

df = pd.DataFrame({
    'Color': ['Light_Red', 'Crimson', 'Ferrari_Red', 'Light_Blue', 'Azure_Blue', 'Sky_Color']
})

dict_col = {
    'Light_Red' : 'Red','Crimson': 'Red','Ferrari_Red': 'Red',
    'Light_Blue': 'Blue','Azure_Blue': 'Blue','Sky_Color': 'Blue'
}

df['Color'] = df['Color'].apply(lambda x: dict_col[x])

df.head()

相关问题 更多 >