gpt4 book ai didi

Python:使用 np.where 维护多列

转载 作者:行者123 更新时间:2023-12-01 02:02:36 25 4
gpt4 key购买 nike

是否可以使用 np.where 一次维护多个列?通常,一列由 np.where 维护,因此我的编码如下所示:

df['col1] = np.where(df[df.condition == 'yes'],'sth', '')
df['col2'] = np.where(df[df.condition == 'yes'], 50.00, 0.0)

但是由于我对相同的条件进行了两次测试,我想知道是否可以通过 2 列并在一次运行中填充它们。

我尝试过这个:

df['col1','col2'] = np.where(df[df.condition == 'yes'],['sth',50.00], ['',0.0])

但是它不起作用。有没有办法实现这一点?

谢谢:)

最佳答案

我认为需要将 bool 掩码 reshape 为(N x 1):

m = df.condition == 'yes'
df[['col1','col2']] = pd.DataFrame(np.where(m[:, None], ['sth',50.00], ['',0.0]))

解决方案的唯一缺点是如果 list 中的值类型不同 - 带有 string 的数字 - 那么 numpy.where 两个输出列转换为字符串

示例:

df = pd.DataFrame({'A':list('abcdef'),
'condition':['yes'] * 3 + ['no'] * 3})

print (df)
A condition
0 a yes
1 b yes
2 c yes
3 d no
4 e no
5 f no

m = df.condition == 'yes'
df[['col1','col2']] = pd.DataFrame(np.where(m[:, None], ['sth',50.00], ['',0.0]))
print (df)
A condition col1 col2
0 a yes sth 50.0
1 b yes sth 50.0
2 c yes sth 50.0
3 d no 0.0
4 e no 0.0
5 f no 0.0

print (df.applymap(type))
A condition col1 col2
0 <class 'str'> <class 'str'> <class 'str'> <class 'str'>
1 <class 'str'> <class 'str'> <class 'str'> <class 'str'>
2 <class 'str'> <class 'str'> <class 'str'> <class 'str'>
3 <class 'str'> <class 'str'> <class 'str'> <class 'str'>
4 <class 'str'> <class 'str'> <class 'str'> <class 'str'>
5 <class 'str'> <class 'str'> <class 'str'> <class 'str'>

编辑:我使用 NaN 值进行测试:

df = pd.DataFrame({'A':list('abcdefghi'),
'condition':['yes'] * 3 + ['no'] * 3 + [np.nan] * 3})

m = df.condition == 'yes'
df[['col1','col2']] = pd.DataFrame(np.where(m[:, None], ['sth',50.00], ['',0.0]))
print (df)
A condition col1 col2
0 a yes sth 50.0
1 b yes sth 50.0
2 c yes sth 50.0
3 d no 0.0
4 e no 0.0
5 f no 0.0
6 g NaN 0.0
7 h NaN 0.0
8 i NaN 0.0

关于Python:使用 np.where 维护多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49447233/

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