我怎样才能实现像np.where这样的东西(['value1','value2']中的df [varaible])

Pum*_*n C 5 python numpy series pandas categorical-data

嗨我想在一个other条件下改变一个分类变量的值['value1','value2']

这是我的代码:

random_sample['NAME_INCOME_TYPE_ind'] = np.where(random_sample['NAME_INCOME_TYPE'] in ['Maternity leave', 'Student']), 'Other')
Run Code Online (Sandbox Code Playgroud)

我尝试添加.any()这行代码的不同位置,但它仍然无法解决错误.ValueError:Series的真值是不明确的.使用a.empty,a.bool(),a.item(),a.any()或a.all().

yat*_*atu 1

您可以使用str.contains来检查条件是否满足:

l = ('|').join(['Maternity leave', 'Student'])
m = random_sample['NAME_INCOME_TYPE'].str.contains(l)
Run Code Online (Sandbox Code Playgroud)

您还可以m使用以下方式生成.isin

random_sample['NAME_INCOME_TYPE'].isin(['Maternity leave', 'Student'])
Run Code Online (Sandbox Code Playgroud)

然后使用np.where. 但是,请注意,您不能仅指定根据条件从中选择的两个值之一,您必须同时指定xy。对于您的情况,您可以使用 df['NAME_INCOME_TYPE']andother作为xand y

random_sample['NAME_INCOME_TYPE_ind'] = np.where(m, 
                                                'Other',
                                                random_sample['NAME_INCOME_TYPE'])
Run Code Online (Sandbox Code Playgroud)

在示例数据帧上进行测试:

df = pd.DataFrame({'NAME_INCOME_TYPE':['word1','word2','Student']})

l = ('|').join(['Maternity leave', 'Student'])
m = random_sample['NAME_INCOME_TYPE'].str.contains(l)
df['NAME_INCOME_TYPE_ind'] = np.where(m, 'Other', df['NAME_INCOME_TYPE'])

       NAME_INCOME_TYPE NAME_INCOME_TYPE_ind
0            word1                word1
1            word2                word2
2          Student                Other
Run Code Online (Sandbox Code Playgroud)