根据另一列创建一个新列

时间:2018-07-13 12:56:55

标签: python pandas for-loop conditional-statements

新编辑: 有人可以帮我解决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。

有人可以给我一些提示吗?非常感谢。

0 个答案:

没有答案
相关问题