如果我有一个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,我已经多次看到这种类型的问题。 在中,它们具有名为的包中的内置函数。但是)中没有针对此类问题的内置函数。 我知道列总是使数据难以通过函数进行转换。当我收到这样的数据时,想到的第一件事就是“弄平”或取消嵌套列。 我正在使用和函数来解决此