【发布时间】:2017-04-30 18:45:22
【问题描述】:
我正在尝试“递归”计算熊猫数据框的列值。
假设有两个不同天的数据,每个天有 10 个观测值,并且您想要计算一些变量 r,其中仅给出 r 的第一个值(在每一天),并且您想要计算剩余的 2*9 个条目,而每个后续值取决于 r 的前一个条目和一个额外的“同时期”变量“x”。
第一个问题是我想单独执行每一天的计算,即我想使用 pandas.groupby() 函数进行所有计算...但是当我尝试对数据进行子集化并使用 @987654325 @函数,我只得到“NaN”条目
data.groupby(data.index)['r'] = ( (1+data.groupby(data.index)['x']*0.25) * (1+data.groupby(data.index)['r'].shift(1)))
对于我的第二种方法,我使用了一个 for 循环来遍历索引(日期):
for i in range(2,21):
data[data['rank'] == i]['r'] = ( (1+data[data['rank'] == i]['x']*0.25) * (1+data[data['rank'] == i]['r'].shift(1))
但是,这对我不起作用。有没有办法在 DataFrames 上执行这样的计算?也许像滚动应用之类的东西?
数据:
df = pd.DataFrame({
'rank' : [1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10],
'x' : [0.00275,0.00285,0.0031,0.0036,0.0043,0.0052,0.0063,0.00755,0.00895,0.0105,0.0027,0.00285,0.0031,0.00355,0.00425,0.0051,0.00615,0.00735,0.00875,0.0103],
'r' : [0.00158,'NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN',0.001485,'NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN']
},index=['2014-01-02', '2014-01-02', '2014-01-02', '2014-01-02',
'2014-01-02', '2014-01-02', '2014-01-02', '2014-01-02',
'2014-01-02', '2014-01-02', '2014-01-03', '2014-01-03',
'2014-01-03', '2014-01-03', '2014-01-03', '2014-01-03',
'2014-01-03', '2014-01-03', '2014-01-03', '2014-01-03'])
【问题讨论】:
-
对此有很多疑问,但目前还没有快速的方法在 pandas 中进行此类递归关系计算。你必须循环。有an open issue关于它。