Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用计算向前填充数据帧/数组的更好方法?_Python_Pandas_Numpy - Fatal编程技术网

Python 用计算向前填充数据帧/数组的更好方法?

Python 用计算向前填充数据帧/数组的更好方法?,python,pandas,numpy,Python,Pandas,Numpy,我有一个数据帧(或者numpy 2D数组,如果您愿意的话),如下所示: 我需要用以下内容填写所有NaN: for i in range(1, 10): df.loc[:, i] = const + df.loc[:, i-1].multiply(const) 其中,const是一个常数。现在,显然首先想到的是使用切片: df.loc[:, 1:] = const + df.loc[:, :-1].multiply(const) 但请注意,下一列的值取决于上一列的计算值。有没有办法在循

我有一个数据帧(或者numpy 2D数组,如果您愿意的话),如下所示:

我需要用以下内容填写所有
NaN

for i in range(1, 10):
    df.loc[:, i] = const + df.loc[:, i-1].multiply(const)
其中,
const
是一个常数。现在,显然首先想到的是使用切片:

df.loc[:, 1:] = const + df.loc[:, :-1].multiply(const)
但请注意,下一列的值取决于上一列的计算值。有没有办法在循环之外做到这一点


注:虽然这完全没有必要,但:

df.loc[row_slice, col_slice].values
将返回切片帧的
numpy-NDArray

设置

df = pd.DataFrame(
    np.ones((5, 10), dtype=int) * 29,
    index=pd.date_range('2016-09-19', periods=5, freq='H'),
    columns=range(10))

df
constant = 2
p = np.power(constant, np.arange(1, df.values.shape[1]))
df.iloc[:, 1:] = p * (1 + df.values[:, [0]]) + np.append(0, p[:-1].cumsum())

df


解决方案

df = pd.DataFrame(
    np.ones((5, 10), dtype=int) * 29,
    index=pd.date_range('2016-09-19', periods=5, freq='H'),
    columns=range(10))

df
constant = 2
p = np.power(constant, np.arange(1, df.values.shape[1]))
df.iloc[:, 1:] = p * (1 + df.values[:, [0]]) + np.append(0, p[:-1].cumsum())

df

我就知道你不会失望的!这是对
power
函数的一次极好的破解。我在
numpy
中还有3个实现,但我从未想过使用
power
。事实上,因为我问了我拥有的最简单的模型,孤立地看,
power
是最自然的选择。对于其他一些更复杂的模型,常数并不是那么简单,它实际上是模型系数,可以是不同的。明天我会再玩一次……我不能保证我会有时间看,但我总是欢迎挑战。我将尝试寻找其他模型。这些模型也可能使用多个列。实际上是阿里玛。。。因此,根据顺序,将使用比前一列更多的内容。最糟糕的是ARIMA(2,2,q),它需要4个前面的列,每个列都有自己的系数,还有一个可能的漂移项……哈!我有54个模型!好吧,如果你不考虑那些天真的。。。我今天一整天都在疯狂地进行反循环,我想我可以在这里收集更多的想法。因此,我发布了我拥有的最简单的模型,看看是否有其他方法,而不是我所考虑的。不是很有希望,但你确实证明我错了!