python - 在自身上加入 DataFrame 以加速迭代
问题描述
我正在做一个数据项目,我正在尝试加快我的初始数据处理,因为我不可避免地想对数据做一些其他/新的事情。到目前为止,我一直在尝试进行更多矢量化并使用 np.where 等。我已经看到了物质收益。
我需要处理的最后一点代码是最慢的。我正在使用 itterrows 循环浏览一个非常大的数据框(> 百万行)。
我本质上想做的是SQL等价于
select curr.value, prev.value from t1 left join t2 on curr.number = prev.number - 1
据我所知,没有办法像这样在自身上加入 DataFrame。是否有其他方法可以遍历它以比较当前值和以前的值?这是数据框当前的外观
df =
[a b c
3 1 0
4 1 0
5 1 0
6 0 1]
请注意,b 从 1 变为 0,这就是我要捕获的内容,这样我现在将拥有一个看起来像这样的 df
[a b c b_c
3 1 0 0
4 1 0 0
5 1 0 0
6 0 1 1]
非常感谢任何帮助,谢谢。
解决方案
我想你正在寻找这样的东西。基本上你想知道从 b 到 c 的切换。
df = pd.DataFrame()
df["a"] = [3,4,5,6,7,8,9]
df["b"] = [1,1,1,0,0,1,1]
df["c"] = [0,0,0,1,1,0,0]
df["b_c"] = df["b"].eq(df["c"].shift()).astype(int)
print(df)
输出:
a b c b_c
0 3 1 0 0
1 4 1 0 0
2 5 1 0 0
3 6 0 1 1
4 7 0 1 0
5 8 1 0 1
6 9 1 0 0
我不确定这是否是最快的方法,或者它是否比 iterrows 更快,但我认为它是。(至少看起来不错)
推荐阅读
- html - 如何在 R-Studio 中查看 html?
- android - 垂直ViewPager2中的垂直ScrollView无法正常工作Android
- ios - 以编程方式创建时 UIViewController 的 UIView 位置不明确
- c++ - 采用函数 C++ 的自定义类型声明
- php - 多个日期之间的小时总和
- math - 如何 ansible role1 输出 + role2 输出 = 打印结果
- javascript - 如何从异步等待函数而不是 Promise 返回布尔值
(打字稿|反应) - html - 从前端下载图像标签不起作用
- python - 尝试为 peewee 使用自定义 UUID mixin 不会覆盖基本 AutoField ID
- javascript - JS:不能对将被最小化或置于后台的页面使用异步剪贴板 API