Python 如何避免使用pandas进行循环?
如果可能的话,我想知道如何在不使用for循环的情况下优化此代码。我想做的是对df系列中的所有值进行分类,['СССССССССааиа]]逐个查看列表代表和列表dem中的关键字。谢谢大家!Python 如何避免使用pandas进行循环?,python,python-3.x,pandas,loops,for-loop,Python,Python 3.x,Pandas,Loops,For Loop,如果可能的话,我想知道如何在不使用for循环的情况下优化此代码。我想做的是对df系列中的所有值进行分类,['СССССССССааиа]]逐个查看列表代表和列表dem中的关键字。谢谢大家! conditions = ['a','b'] list_rep = ['a1','a2'] list_dem = ['b1','b2'] for i in list_rep: df['Состояние'] = [conditions[0] if i in str(x).lower() else x
conditions = ['a','b']
list_rep = ['a1','a2']
list_dem = ['b1','b2']
for i in list_rep:
df['Состояние'] = [conditions[0] if i in str(x).lower() else x for x in df['Состояние']]
for i in list_exp:
df['Состояние'] = [conditions[1] if i in str(x).lower() else x for x in df['Состояние']]
for i in conditions:
df['Состояние'] = [i if i in str(x).lower() else x for x in df['Состояние']]
df['Состояние'] = [x if x in conditions else '-' for x in df['Состояние']]
对正则表达式或
使用First,然后使用通过|
连接
,并在中设置新值,然后使用并替换缺少的值:
df = pd.DataFrame({'Состояние':['abc','def','opa1','ujb2','a1sb1d','B21op']})
print (df)
Состояние
0 abc
1 def
2 opa1
3 ujb2
4 a1sb1d
5 B21op
conditions = ['a','b']
list_rep = ['a1','a2']
list_dem = ['b1','b2']
d = {**dict.fromkeys(list_rep,conditions[0]),
**dict.fromkeys(list_dem,conditions[1]),
**dict(zip(conditions,conditions))}
print (d)
{'a1': 'a', 'a2': 'a', 'b1': 'b', 'b2': 'b', 'a': 'a', 'b': 'b'}
pat = rf'({"|".join(d.keys())})'
df['Состояние'] = (df['Состояние'].str.lower()
.str.extract(pat, expand=False)
.map(d)
.fillna('-'))
print (df)
Состояние
0 a
1 -
2 a
3 b
4 a
5 b
另一个想法是创建映射字典,首先使用,然后最后替换缺少的值:
df = pd.DataFrame({'Состояние':['abc','def','opa1','ujb2','a1sb1d','B21op']})
print (df)
Состояние
0 abc
1 def
2 opa1
3 ujb2
4 a1sb1d
5 B21op
conditions = ['a','b']
list_rep = ['a1','a2']
list_dem = ['b1','b2']
d = {**dict.fromkeys(list_rep,conditions[0]),
**dict.fromkeys(list_dem,conditions[1]),
**dict(zip(conditions,conditions))}
print (d)
{'a1': 'a', 'a2': 'a', 'b1': 'b', 'b2': 'b', 'a': 'a', 'b': 'b'}
pat = rf'({"|".join(d.keys())})'
df['Состояние'] = (df['Состояние'].str.lower()
.str.extract(pat, expand=False)
.map(d)
.fillna('-'))
print (df)
Состояние
0 a
1 -
2 a
3 b
4 a
5 b
您可以添加一些预期输出为-5-6行的数据样本吗?我希望得到一个值为“a”、“b”或“-”的序列。我的解决方案如何工作?