gpt4 book ai didi

python - 当先前的值很重要时如何使用 `apply()` 或其他矢量化方法

转载 作者:太空狗 更新时间:2023-10-30 01:47:54 25 4
gpt4 key购买 nike

假设我有一个如下形式的 DataFrame,其中第一列是一个随机数,其他列将基于前一列中的值。

enter image description here

为了便于使用,假设我希望每个数字都是前一个数字的平方。所以它看起来像下面这样。

enter image description here

我知道我可以编写一个非常简单的循环来执行此操作,但我也知道循环在 python/pandas 中通常不是最有效的。如何使用 apply()rolling_apply() 完成此操作?或者,以其他方式更有效地完成?

我的(失败的)尝试如下:

In [12]: a = pandas.DataFrame({0:[1,2,3,4,5],1:0,2:0,3:0})

In [13]: a
Out[13]:
0 1 2 3
0 1 0 0 0
1 2 0 0 0
2 3 0 0 0
3 4 0 0 0
4 5 0 0 0

In [14]: a = a.apply(lambda x: x**2)

In [15]: a
Out[15]:
0 1 2 3
0 1 0 0 0
1 4 0 0 0
2 9 0 0 0
3 16 0 0 0
4 25 0 0 0


In [16]: a = pandas.DataFrame({0:[1,2,3,4,5],1:0,2:0,3:0})

In [17]: pandas.rolling_apply(a,1,lambda x: x**2)
C:\WinPython64bit\python-3.5.2.amd64\lib\site-packages\spyderlib\widgets\externalshell\start_ipython_kernel.py:1: FutureWarning: pd.rolling_apply is deprecated for DataFrame and will be removed in a future version, replace with
DataFrame.rolling(center=False,window=1).apply(args=<tuple>,kwargs=<dict>,func=<function>)
# -*- coding: utf-8 -*-
Out[17]:
0 1 2 3
0 1.0 0.0 0.0 0.0
1 4.0 0.0 0.0 0.0
2 9.0 0.0 0.0 0.0
3 16.0 0.0 0.0 0.0
4 25.0 0.0 0.0 0.0

In [18]: a = pandas.DataFrame({0:[1,2,3,4,5],1:0,2:0,3:0})

In [19]: a = a[:-1]**2

In [20]: a
Out[20]:
0 1 2 3
0 1 0 0 0
1 4 0 0 0
2 9 0 0 0
3 16 0 0 0

In [21]:

所以,我的问题主要是如何在我的 DataFrame 计算中引用前一列的值。

最佳答案

您所描述的是递归关系,我认为目前没有任何非循环方式可以做到这一点。诸如 applyrolling_apply 之类的东西仍然依赖于在开始之前获得所有需要的数据,并在结束时一次性输出所有结果数据。也就是说,它们不允许您使用同一系列 的较早值来计算下一个值。请参见 this questionthis one 以及 this pandas issue

实际上,对于您的示例,您只有三列要填写,因此执行三遍循环(如其他一些答案所示)可能不会对性能造成重大影响。

关于python - 当先前的值很重要时如何使用 `apply()` 或其他矢量化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42983906/

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