gpt4 book ai didi

python - 在 Pandas 数据框中矢量化条件赋值

转载 作者:IT老高 更新时间:2023-10-28 20:53:30 26 4
gpt4 key购买 nike

如果我有一个带有 x 列的数据框 df 并且想根据 x 的值创建列 y > 在伪代码中使用这个:

if df['x'] < -2 then df['y'] = 1 
else if df['x'] > 2 then df['y'] = -1
else df['y'] = 0

我将如何实现这一目标?我认为 np.where 是最好的方法,但不确定如何正确编码。

最佳答案

一种简单的方法是先分配默认值,然后执行 2 次 loc 调用:

In [66]:

df = pd.DataFrame({'x':[0,-3,5,-1,1]})
df
Out[66]:
x
0 0
1 -3
2 5
3 -1
4 1

In [69]:

df['y'] = 0
df.loc[df['x'] < -2, 'y'] = 1
df.loc[df['x'] > 2, 'y'] = -1
df
Out[69]:
x y
0 0 0
1 -3 1
2 5 -1
3 -1 0
4 1 0

如果你想使用 np.where 那么你可以使用嵌套的 np.where:

In [77]:

df['y'] = np.where(df['x'] < -2 , 1, np.where(df['x'] > 2, -1, 0))
df
Out[77]:
x y
0 0 0
1 -3 1
2 5 -1
3 -1 0
4 1 0

所以这里我们定义第一个条件为 x 小于 -2,返回 1,然后我们有另一个 np.where 测试另一个条件 x 大于 2 并返回 - 1,否则返回0

时间

In [79]:

%timeit df['y'] = np.where(df['x'] < -2 , 1, np.where(df['x'] > 2, -1, 0))

1000 loops, best of 3: 1.79 ms per loop

In [81]:

%%timeit
df['y'] = 0
df.loc[df['x'] < -2, 'y'] = 1
df.loc[df['x'] > 2, 'y'] = -1

100 loops, best of 3: 3.27 ms per loop

所以对于这个示例数据集,np.where 方法的速度是原来的两倍

关于python - 在 Pandas 数据框中矢量化条件赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28896769/

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