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