Python Pandas: 如何使列行依赖于它的前几行,可能有一个函数?

Python Pandas: How to make a column row dependent on it's previous rows, possibly with a function?

我正在尝试根据 A 列和 B 列的先前数据计算 B 列。一个简单的函数示例是

例如B(n) = A(n-1) + B(n-1),

其中 n 是 Pandas 数据帧的索引。我不一定需要使用数据帧索引。

在这个例子中,我从 B(1) = 0 开始,并以连续的方式添加 A 行。

n    A(n)   B(n)
----------------
1     1      0
2     0      1
3     2      1
4     9      3

此数据结构的示例将在 Pandas 中定义为

d = {'A' : pd.Series([1, 0, 2, 9],),
     'B' : pd.Series([0, float("nan"), float("nan"), float("nan")])}

df = pd.DataFrame(d)

更新

Henry Cutchers 和 Jakob 的回答都很好。

您是否考虑过使用 Cython http://www.cython.org?它将与 pandas 互操作——相同的数据结构等(因为 pandas 是用 cython 编写的)。在我看来,您需要能够以任意方式遍历您的数据框(不知道更多关于您的问题,这就是我所能说的),但需要速度。 Cython 编译为 C.

我可以预见以下形式的循环:

import numpy
import pandas
import datetime
dates = pandas.date_range('20130101',periods=6)
myDataFrame = pandas.DataFrame(numpy.arange(12).reshape((6,2)),index=dates,columns=list('ab'))
a=myDataFrame["a"]
b=myDataFrame["b"]
print a
print b
out=numpy.empty_like(a.values)
out[0] = 0
#this loop will work but be slow...
for i in range(1, a.shape[0]):
    out[i] = a[i-1] + b[i-1]
myDataFrame['c'] = pandas.Series(out, index=myDataFrame.index)
print myDataFrame

但这会很慢。

您的示例问题可以简化为仅依赖于 B[0]A[n]
一个可能的简单解决方案看起来像

import pandas as pd
import numpy as np
d = {'A' : pd.Series([1, 0, 2, 9],),
     'B' : pd.Series([0, float("nan"), float("nan"), float("nan")])}

df = pd.DataFrame(d)
for i in range(1,len(df.A)):
    df.B[i] = df.B[0] + np.sum(df.A[:i])
df

产生数据框

如果您面临类似的迭代依赖,您应该能够构建适合您需求的类似方法。