gpt4 book ai didi

python - np.where 多个变量

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:35 27 4
gpt4 key购买 nike

我有一个数据框:

customer_id [1,2,3,4,5,6,7,8,9,10]
feature1 [0,0,1,1,0,0,1,1,0,0]
feature2 [1,0,1,0,1,0,1,0,1,0]
feature3 [0,0,1,0,0,0,1,0,0,0]

使用这个我想创建一个新变量(比如new_var)来表示当特征1为1时new_var=1,如果feature_2=1则new_var=2,feature3=1则new_var=3,否则4。我是尝试 np.where 但虽然它不会给我错误,但它没有做正确的事情 - 所以我猜嵌套的 np.where 仅适用于单个变量。在这种情况下,在 pandas 中执行嵌套 if/case 的最佳方法是什么?

我的 np.where 代码是这样的:

df[new_var]=np.where(df['feature1']==1,'1', np.where(df['feature2']==1,'2', np.where(df[feature3']==1,'3','4')))

最佳答案

我认为你需要numpy.select - 它选择第一个 True 值,其他所有值都不重要:

m1 = df['feature1']==1 
m2 = df['feature2']==1
m3 = df['feature3']==1
df['new_var'] = np.select([m1, m2, m3], ['1', '2', '3'], default='4')

示例:

customer_id = [1,2,3,4,5,6,7,8,9,10]
feature1 = [0,0,1,1,0,0,1,1,0,0]
feature2 = [1,0,1,0,1,0,1,0,1,0]
feature3 = [0,0,1,0,0,0,1,0,0,0]

df = pd.DataFrame({'customer_id':customer_id,
'feature1':feature1,
'feature2':feature2,
'feature3':feature3})

m1 = df['feature1']==1
m2 = df['feature2']==1
m3 = df['feature3']==1
df['new_var'] = np.select([m1, m2, m3], ['1', '2', '3'], default='4')
print (df)
customer_id feature1 feature2 feature3 new_var
0 1 0 1 0 2
1 2 0 0 0 4
2 3 1 1 1 1
3 4 1 0 0 1
4 5 0 1 0 2
5 6 0 0 0 4
6 7 1 1 1 1
7 8 1 0 0 1
8 9 0 1 0 2
9 10 0 0 0 4

如果在features中只有10可以将0转换为False1True:

m1 = df['feature1'].astype(bool)
m2 = df['feature2'].astype(bool)
m3 = df['feature3'].astype(bool)
df['new_var'] = np.select([m1, m2, m3], ['1', '2', '3'], default='4')
print (df)
customer_id feature1 feature2 feature3 new_var
0 1 0 1 0 2
1 2 0 0 0 4
2 3 1 1 1 1
3 4 1 0 0 1
4 5 0 1 0 2
5 6 0 0 0 4
6 7 1 1 1 1
7 8 1 0 0 1
8 9 0 1 0 2
9 10 0 0 0 4

关于python - np.where 多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45609903/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com