熊猫-根据if条件创建新列

时间:2020-08-20 17:57:07

标签: pandas if-statement data-cleaning

我具有以下数据框,并且我想创建一列'poster',该列向用户显示comment_id != np.nan是否为np.nan,否则为{}。

我曾尝试在for循环中使用if语句来执行此操作,但如果在comment_id列中包含整数,则不会仅在'poster'列中获取用户名,而是在np.nan列中的整数和'comment_id'的“海报”列。可能只有一小件事是错误的,但我似乎无法弄清楚。

非常感谢您的帮助!

d = {'comment_id':[1, np.nan, 2, np.nan, np.nan, 3],
     'user': ["Bob", "Ben", "Ben", "Charly", "Steve", "Tracy"]}

toydf = pd.DataFrame(d)

toydf['poster'] = np.nan

for n in toydf['comment_id']:
    if n != np.nan:
        toydf['poster']=toydf['user']
    else:
        toydf['poster']= np.nan

2 个答案:

答案 0 :(得分:2)

loc行,其中 comment_id 不为空,然后保存 user

toydf.loc[toydf['comment_id'].notna(), 'poster'] = toydf['user']
#output
    comment_id  user    poster
0   1.0         Bob     Bob
1   NaN         Ben     NaN
2   2.0         Ben     Ben
3   NaN         Charly  NaN
4   NaN         Steve   NaN
5   3.0         Tracy   Tracy

答案 1 :(得分:2)

让我们尝试在条件mask下使用isna

df['New'] = df.user.mask(df.comment_id.isna())
df
Out[145]: 
   comment_id    user    New
0         1.0     Bob    Bob
1         NaN     Ben    NaN
2         2.0     Ben    Ben
3         NaN  Charly    NaN
4         NaN   Steve    NaN
5         3.0   Tracy  Tracy