我有一个包含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
答案 0 :(得分:4)
让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
答案 1 :(得分:3)
使用类似的东西:
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}
答案 2 :(得分:3)
将findall
与map
一起使用,然后将其分配回
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