首页 > 解决方案 > 使用 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

标签: pandasnumpy

解决方案


我认为可能有帮助的是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   

推荐阅读