我具有以下数据框,并且我想创建一列'poster'
,该列向用户显示comment_id != np.nan
是否为np.nan
,否则为{1>}。
我曾尝试在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
答案 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