当前位置: 首页 > 面试题库 >

在pandas数据帧中向量化条件分配

邵弘义
2023-03-14
问题内容

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

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

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


问题答案:

一种简单的方法是先分配默认值,然后执行两次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方法的速度是以前的两倍



 类似资料:
  • 问题内容: 我有一个包含经纬度坐标列表的数据框: 我的目标是使用Haversine函数找出KM中每个项目之间的距离: 我的目标是得到一个看起来像result_df的数据框,其中的值是每个提供程序ID之间的距离: 我可以循环执行此操作,但是速度非常慢。我正在寻找一些帮助将其转换为向量化方法: 问题答案: 为了矢量化此代码,您将需要对完整的数据框进行操作,而不要对单个经纬度进行操作。我对此做了尝试。我

  • 问题内容: 我有两个DataFrames。。。 是一个表,我需要从使用索引的值中提取值,这些索引是从df2中的多个列检索到的。 我看到有一个函数可以在给定索引和列值的情况下完美运行,但是当尝试向量化此函数以创建新列时,我失败了… 现在,我需要做的是在-上建立一个新的新列-当基于索引建立索引时,有效地向量化上述函数中指定的,来自的列对。 导致 。。。 问题答案: 有一个恰当地命名的函数可以做到这一点

  • 问题内容: 我有两个熊猫数据框,一个叫做“ orders”,另一个叫做“ daily_prices”。daily_prices如下: 订单如下: 两个数据帧的索引均为datetime.date。通过使用列表解析来遍历所有订单并在“ daily_prices”数据框中查找特定日期的特定报价,然后将该列表作为列添加到“订单”数据框中的“价格”列。 “订单”数据框。我想使用数组操作而不是循环执行此操作。

  • 整理周二的数据集,我看不到如何拆分“流派”列。我试过:

  • 我有以下格式的数据。向量的第一个元素指的是标题,向量的第二个到底部指的是针对标题的值。我希望以表格/结构化格式(或带有标题和值的数据框)放置数据。

  • 问题内容: 我有以下DataFrame,其中列之一是对象(列表类型单元格): 我的预期输出是: 我应该怎么做才能做到这一点? 问题答案: 作为同时使用和python,我已经多次看到这种类型的问题。 在中,它们具有名为的包中的内置函数。但是)中没有针对此类问题的内置函数。 我知道列总是使数据难以通过函数进行转换。当我收到这样的数据时,想到的第一件事就是“弄平”或取消嵌套列。 我正在使用和函数来解决此