在数据框中添加一列,如果列X不为空则取其值,否则取列Y的值
我有一个数据表,其中有一列数据是用分隔符 "\"
分开的。每一行可能有1个或2个分隔符,具体情况不一样。
df[['Desc1','Desc2','Desc3']] = df['Descr'].str.split("\\", expand=True)
我已经把这一列拆分成了多列,像这样:
现在在 df['Desc3']
这一列中,有些行有值,而在 df['Desc1']
中也有些行有值。我想添加一个新列,这个新列会优先取 Desc3
列的值,如果 Desc3
没有值,就取 Desc1
列的值。
我尝试了以下代码:
def fn_name(row):
if row['Desc3'] == '':
return row['Desc1']
else:
return row['Desc3']
df['name'] = df.apply(fn_name,axis=1)
但是,这段代码没有成功。当 row['Desc3']
有值时,它能返回 df['name']
列的值,但当 row['Desc3']
没有值时,它却不能返回 row['Desc1']
的值。
- 我该怎么修复这个问题?
- 有没有比使用 apply 函数更好的方法来实现这个?
1 个回答
0
我觉得''(空字符串)会是个问题。''和null(空值)是不一样的。
你需要用null来检查条件,而不是用''。
会有两种解决方案。
# using apply
def fn_name(row):
if pd.notnull(row['Desc3']):
return row['Desc1']
else:
return row['Desc3']
df['name'] = df.apply(fn_name, axis = 1)
# using np.where
df['name'] = np.where(pd.notnull(df['Desc3']), df['Desc3'], df['Desc1'])