来自带有np.select的另一列的数据

时间:2019-07-30 09:29:22

标签: pandas numpy

如何使用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

1 个答案:

答案 0 :(得分:0)

我认为在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