pandas - 使用 np.select 来自另一列的数据
问题描述
如何使用 df['column'].str.extract() 为 np.select() 中的选择创建条件列?
df = pd.DataFrame({'column1':['--extract_text--','--extract_text--','--extract_text--','--extract_text--'],'column2':['A','A','B','B']})
conditions = [df['column2'].str.contains('A',case=False,na=False)]
choises = [df['column1'].str.extract('--(.*)--')]
df['new'] = np.select(conditions,choises)
如果我尝试使用代码,我会得到
KeyError: 'new'
但是如果我添加像这样的列
df['new'] = 'a'
然后全部使用,我得到了所有带有选择但没有条件的列:
column1 column2 new
0 --extract_text-- A extract_text
1 --extract_text-- A extract_text
2 --extract_text-- B extract_text
3 --extract_text-- B extract_text
但我希望
column1 column2 new
0 --extract_text-- A extract_text
1 --extract_text-- A extract_text
2 --extract_text-- B a
3 --extract_text-- B a
解决方案
我认为可能有帮助的是expand=False
在内部指定参数str.extract()
conditions = [df['column2'].str.contains('A',case=False,na=False)]
choises = [df['column1'].str.extract('--(.*)--', expand=False)]
df['new'] = np.select(conditions,choises)
column1 column2 new
0 --extract_text-- A extract_text
1 --extract_text-- A extract_text
2 --extract_text-- B 0
3 --extract_text-- B 0
np.where
如果您不0
喜欢df['new']
.
df['new'] = np.where(df['column2'].str.contains('A',case=False,na=False), \
df['column1'].str.extract('--(.*)--', expand=False), \
'')
column1 column2 new
0 --extract_text-- A extract_text
1 --extract_text-- A extract_text
2 --extract_text-- B
3 --extract_text-- B
推荐阅读
- node.js - pg-promise ,如何选择 where ... like date%
- python - 有没有办法将消息传递给不同的进程,允许多个生产者和消费者?
- javascript - 当要单击的文本使用自己的组件呈现时,如何使用反应路由?
- javascript - 如何从 Firebase 存储中检索图像,并将 Firebase UID 作为图像 URL 的一部分?
- python - 以设定的时间间隔运行 python 脚本
- python-3.x - TKinter 不会导航到 Python (Linux) 中的文件夹
- sql - SQL连接多条记录
- android - 如何在不知道 json 键的情况下使用 JsonReader 从 json 读取值
- sql - 允许字符 { 使用 EF Core 的 ExecuteSqlRaw 保存到数据库
- excel - 用它的可见值替换单元格值