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

问题描述

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

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

非常感谢您的帮助!

d = {'comment_id':[1,np.nan,2,3],'user': ["Bob","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

解决方法

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
,

让我们尝试在条件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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...