【发布时间】:2021-12-04 13:52:23
【问题描述】:
我有下面的函数,想把它应用到一个 numpy.roll 上。我在互联网上搜索无济于事,stackoverflow 上的大多数 np.roll 解决方案都倾向于展示如何执行滚动功能,但这不是我想要的。
from sklearn.decomposition import PCA
df = pd.DataFrame({"A": [1, 2, 3, 4, 5, 6, 7, 8], "B": [2, 3, 4, 5, 6, 7, 8, 9]})
df_a = np.array(df)
def first_variance(X):
pca = PCA(n_components=1)
pca.fit(X)
return pca.explained_variance_
np.roll(df_a, 10)
有没有办法像在 pandas df 上一样在这个滚动的 numpy 函数上使用函数?
编辑
对此的预期结果将是结果的时间序列数据框。请忽略数字相同的事实。实际上情况并非如此,只好拿出一些东西来用作演示。
PCA 1 Expl Var PCA 2 Expl Var PCA 3 Expl Var PCA 4 Expl Var PCA 5 Expl Var
2021-10-01 0.011044 0.004083 0.003389 0.002877 0.002368
2021-10-11 0.011044 0.004083 0.003389 0.002877 0.002368
2021-10-21 0.011044 0.004083 0.003389 0.002877 0.002368
2021-10-31 0.011044 0.004083 0.003389 0.002877 0.002368
2021-11-11 0.011044 0.004083 0.003389 0.002877 0.002368
2021-11-21 0.011044 0.004083 0.003389 0.002877 0.002368
2021-12-01 0.011044 0.004083 0.003389 0.002877 0.002368
2021-12-11 0.011044 0.004083 0.003389 0.002877 0.002368
2021-12-21 0.011044 0.004083 0.003389 0.002877 0.002368
2021-12-31 0.011044 0.004083 0.003389 0.002877 0.002368
我打算把数组变成一个df。当我尝试 df.rolling(3).apply(first_variance) 时,我得到了这个错误:
ValueError: Expected 2D array, got 1D array instead: array=[1. 2. 3.]. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
所以我决定把它变成一个数组,然后在上面运行滚动函数,然后把数组变成一个df,看起来像上面的样子。
【问题讨论】:
-
您希望
np.roll做什么?这与df.rolling完全不同。 -
我知道它不像 df.rolling,我想知道我是否可以将函数应用于每 10 个值的数组,就像使用 df.rolling(10) 的数据框每 10 行一样。应用(函数)。但我想将 np.roll() 应用于上述代码中的 first_variance(X) 函数。
-
np.roll` 返回一个新数组。它不会就地执行。
-
您的示例的预期输出是什么?
-
@Michael Szczesny,我已经更新了代码以展示预期的输出。
标签: python numpy rolling-computation