使用计算转发填充DataFrame /数组的更好方法是什么?

时间:2016-11-23 06:21:02

标签: python pandas numpy

我有一个DataFrame(或者numpy 2D数组,如果你愿意的话),就像这样:

                    0       1   2   3   4   5   6   7   8   9
tstamp                                                                                  
2016-09-19 00:00:00 29.0    NaN NaN NaN NaN NaN NaN NaN NaN NaN
2016-09-19 00:01:00 29.0    NaN NaN NaN NaN NaN NaN NaN NaN NaN
2016-09-19 00:02:00 29.0    NaN NaN NaN NaN NaN NaN NaN NaN NaN
2016-09-19 00:03:00 29.0    NaN NaN NaN NaN NaN NaN NaN NaN NaN
2016-09-19 00:04:00 29.0    NaN NaN NaN NaN NaN NaN NaN NaN NaN

我需要填写所有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)

但请注意,下一列的值取决于前一列的计算值。有没有办法在循环外执行此操作?

Ps。虽然这完全没必要,但是:

df.loc[row_slice, col_slice].values

将返回切片框的numpy NDArray

1 个答案:

答案 0 :(得分:3)

设置

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

enter image description here

解决方案

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

enter image description here