新编辑: 有人可以帮我解决for循环吗?
数据如下所示:具有以下索引和一列带有df ['hold意义']的字符串和NaN值。
Index(['Creation Date', 'Booked Date', 'amount', 'Hold Date',
'Hold Release Date', 'Hold Meaning', 'test'],
dtype='object')
df['Hold Meaning']
0 Pricing
1 CS issue
2 NaN
3 NaN
4 NaN
原始帖子 我是python的新手。我现在永远在这个问题上陷入困境:
我要做的是根据另一列的条件创建一个新列:
1)如果该列中的值为NaN,我希望新创建的列中的对应值为“ clean”
2)如果值(小写)包含某些字符串,我希望该值为'x'
3)如果该值不包含某些字符串并且不为空,我希望它为'y'
我尝试了两种不同的方法来实现它:
1)使用np.where或(lambda表达式),但它不允许我降低操作。()
df1['test']=np.where(pd.isna(df1['Hold Meaning']),"clean",np.where(df1['Hold Meaning'].lower().str.contains('Pricing'),"cs",'not cs'))
AttributeError:“系列”对象没有属性“下层”
如果我删除了Lower(),那么它可以工作,但这不是我想要的。
2)我尝试使用for循环和“ in”
for i in df1['Hold Meaning']:
if pd.isna(i):
df1['test1']='clean'
else:
if 'pricing' in i.lower():
df1['test1']='cs'
else:
df1['test1']='non cs'
结果很奇怪。新列中的所有内容均变为“干净”。似乎一切都到了if:pd.isna(i)并返回了真值,即使不是所有的值都是NaN。
有人可以给我一些提示吗?非常感谢。