Pandas DataFrame包含,然后替换字典



我有一个带有A和B列的数据框。

我可以用这条线做到这一点

df.loc[df['A'].str.contains('Fred'),'B']='Blue'

我想在字典的循环中进行此操作。

so

dict = {'Fred':'blue','Jess':'red','David':'Green'}

我如何将其变成一个循环?

示例DF

0   FREDDDD     xxx
1   dfdfa       dfdf
2   dfdf        dfsd
3   GFDFJESS    sdfedf
4   sdfdsfds    dsfd

预期输出

0   FREDDDD     blue
1   dfdfa       dfdf
2   dfdf        dfsd
3   GFDFJESS    red
4   sdfdsfds    dsfd

让我们将 str.extractSeries.map

df = pd.DataFrame({
    'A': ['Fred Flintstone', 'Jessie', 'Jess abcxyz', 'something else']})
df
                 A
0  Fred Flintstone
1           Jessie
2      Jess abcxyz
3   something else

p = r'({})'.format('|'.join(dic.keys()))
df['A'].str.extract(p, expand=False).map(dic)
0     TRUE
1    FALSE
2    FALSE
3      NaN
Name: A, dtype: object

使用 map使用 findall,然后将其分配回

s=df.A.str.findall('|'.join(dic.keys())).str[0].map(dic)
df.loc[s.notnull(),'B']=s
df
Out[1077]: 
           A     B
0  Fred llll  blue
1      CHECK     1
2   Jess mmm   red
3      CHECK     3
4        efg   NaN
5        ijk     3
6        lmn     1
7        opq     7

使用类似:

print(df) #dummy dataframe
    Name  some_col
0   Fred       1.0
1  CHECK       1.0
2   Jess       NaN
3  CHECK       3.0
4    efg       NaN
5    ijk       3.0
6    lmn       1.0
7    opq       7.0
d=dict(zip(df.Name,df.Name.str.contains('Fred')))
print(d)
{'Fred': True,
'CHECK': False,
 'Jess': False,
 'efg': False,
 'ijk': False,
 'lmn': False,
 'opq': False}

最新更新