数据帧包含然后替换字典

2024-09-19 23:43:38 发布

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

我有一个带有a列和B列的数据帧。我想说,如果每行a包含“Fred”,那么B称为“Blue”。你知道吗

我可以用这条线

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

我想在字典的循环中这样做。你知道吗

所以呢

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

Tags: 数据dfblueredfredloc条线dsfd
3条回答

findallmap一起使用,然后重新分配它

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}

让我们用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

相关问题 更多 >