我有一个带有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.extract
与 Series.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}