如何让Pandas滚动通过整个系列?

92dk7w1h  于 2023-01-24  发布在  其他
关注(0)|答案(1)|浏览(148)

Pandas翻滚功能

window_size == step_size时的最后元素

当窗口大小和步长都是3时,我似乎无法获得一个示例9元素序列的最后三个元素。
以下是pandas的预期行为吗?

我想要的结果

如果是这样,如何滚动Series,以便:
pd.Series([1., 1., 1., 2., 2., 2., 3., 3., 3.]).rolling(window=3, step=3).mean()
计算为pd.Series([1., 2., 3.,])

示例

import pandas as pd

    def print_mean(x):
        print(x)
        return x.mean()

    df = pd.DataFrame({"A": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]})

    df["left"] = (
        df["A"].rolling(window=3, step=3, closed="left").apply(print_mean, raw=False)
    )
    df["right"] = (
        df["A"].rolling(window=3, step=3, closed="right").apply(print_mean, raw=False)
    )
    df["both"] = (
        df["A"].rolling(window=3, step=3, closed="both").apply(print_mean, raw=False)
    )
    df["neither"] = (
        df["A"].rolling(window=3, step=3, closed="neither").apply(print_mean, raw=False)
    )

其计算结果为:

A  left  right  both  neither
0  0.0   NaN    NaN   NaN      NaN
1  1.0   NaN    NaN   NaN      NaN
2  2.0   NaN    NaN   NaN      NaN
3  3.0   1.0    2.0   1.5      NaN
4  4.0   NaN    NaN   NaN      NaN
5  5.0   NaN    NaN   NaN      NaN
6  6.0   4.0    5.0   4.5      NaN
7  7.0   NaN    NaN   NaN      NaN
8  8.0   NaN    NaN   NaN      NaN

并打印:
一个二个一个一个

wz1wpwve

wz1wpwve1#

您可以尝试使用%运算符每3行设置一个子集:

df[df.index % 3 == 0]

这将输出:

相关问题