python - 如何使用有时包含 np.nan 的其他列的字符串填充 df 列,遍历 elifs 以返回适当的组合?
问题描述
df 数据不完善:
df = pd.DataFrame({'A Surname' : ['Smith', 'Longshore', 'Jones'],
'A Title': ['Mr', 'Miss', np.nan],
'B Surname' : ['Smith', np.nan, 'Nguyen'],
'B Title': ['Mrs', np.nan, np.nan]})
我正在寻找一个包含适合于尽可能同时解决 A 和 B 的字符串的列。如果有np.nan,则组合字段返回np.nan,并且它需要是合乎逻辑的(例如,如果'B Surname'是np.nan,则不要使用'B Title'),所以我需要一系列规则来确定最合适的组合。我不成功的方法:
def combined(x):
full = df['A Title'] + ' ' & df['A Surname'] & ' & ' & df['B Title'] & ' ' & df['B Surname']
no_title = df['A Surname'] & ' & ' & df['B Surname']
# more combinations
if full != np.nan:
return full
elif no_title != np.nan:
return no_title
# more elifs
else:
return df['A Surname']
df['combined string'] = np.nan
df['combined string'] = df['combined string'].apply(combined)
所需的输出如下所示:
desired_df = pd.DataFrame({'A Surname' : ['Smith', 'Longshore', 'Jones'],
'A Title': ['Mr', 'Miss', 'Mr'],
'B Surname' : ['Smith', np.nan, 'Whatever'],
'B Title': ['Mrs', np.nan, np.nan],
'combined string': ['Mr Smith & Mrs Smith', 'Miss Longshore', 'Jones & Whatever']})
这样做的实用方法是什么?
解决方案
Series.str.cat
在这里使用Series.str.strip
:
a = df['A Title'].str.cat(df['A Surname'], sep=' ', na_rep='').str.strip()
b = df['B Title'].str.cat(df['B Surname'], sep=' ', na_rep='').str.strip()
df['combined string'] = a.str.cat(b, sep=' & ').str.strip(' &')
print (df)
A Surname A Title B Surname B Title combined string
0 Smith Mr Smith Mrs Mr Smith & Mrs Smith
1 Longshore Miss NaN NaN Miss Longshore
2 Jones NaN Nguyen NaN Jones & Nguyen
推荐阅读
- sqlite - 如何将布尔值插入我的 SQLite 数据库?
- java - 为什么数组不在下面的程序中添加字符?
- android - Xamarin Forms - Android - FCM - 当应用程序处于前台、后台和滑动关闭时提醒通知
- c++ - 标题栏窗口在第二个窗口中短暂出现,然后会消失几秒钟
- javascript - 在返回 AXIOS 承诺响应之前继续运行的函数
- java - 如何在spring集成中使用java dsl将db poller xml配置转换为java配置
- macos - 在 Jupyter Lab markdown 中渲染数学公式的问题
- ios - 是否可以在使用一个等值对象字段的对象数组上使用包含?
- python - “charmap”编解码器无法解码位置 4836 中的字节 0x9d:字符映射到
- javascript - 显示结果不显示