【发布时间】:2019-04-19 23:19:04
【问题描述】:
这是一个关于矢量化的一般问题,但我将使用一个示例来帮助提出这个问题。我有一个数据框df 和df[col_1] bool(真/假)。
在df[col_2] 中,我想根据第1 列的前五行df[col_1][i-6:i-1] 是否包含df[col_1][i] 的匹配项来返回另一个真/假。
这是我现在正在使用的循环,但它是众多循环之一,所以我认为随着数据变大,它们一定会减慢速度:
for i in df.index:
if i < 6:
df[col_2][i] = 0.
else:
df[col_2][i] = df[col_1][i] not in tuple(df[col_1].ix[i-6:i-1,col_1)
...输出如下所示:
. col_1 col_2
0 TRUE
1 TRUE
2 TRUE
3 TRUE
4 FALSE
5 FALSE FALSE
6 FALSE FALSE
7 FALSE FALSE
8 FALSE FALSE
9 TRUE TRUE
10 FALSE FALSE
11 FALSE FALSE
12 FALSE FALSE
13 FALSE FALSE
14 TRUE FALSE
15 TRUE FALSE
16 TRUE FALSE
17 TRUE FALSE
18 TRUE FALSE
19 TRUE FALSE
20 FALSE TRUE
如何在带有矢量化的 pandas 中做到这一点 - 也许使用 shift() 或偏移函数?
【问题讨论】:
-
将样本数据和结果放入问题中总是一个好主意......我无法想到一个简洁的方法来做到这一点,但它肯定会更快使用
shift()执行上述操作,即使您有 5 个。此外,上面的代码不是工作代码,因此很难检查可能的答案(没有工作代码和/或示例结果)。 -
明白,我已经添加了结果应该是什么。不知道为什么它不起作用 - 我更改了名称以使其更易于阅读,但应该仍然有效。
-
谢谢,只要显示结果就足够了。只需要明确你想要做什么。
标签: python pandas vectorization