如何为np.select()中的选择使用df‘column’.str.export()来生成条件列?
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发布于 2019-07-30 09:50:59
我认为在str.extract()中指定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 https://stackoverflow.com/questions/57268504
复制相似问题