首页 > 解决方案 > 在 pandas 的滚动窗口中应用 pd.cut

问题描述

假设我有一个如下数据框:

df = pd.DataFrame({"a": np.random.random_integers(1, high=10, size=50)})

我可以将此数据框切割成最小值和最大值之间的百分比片段(以下 1% 的片段),并放置间隔和出现次数:

df["bins"] = pd.cut(df['a'], np.arange(df["a"].min(), df["a"].max()*1.01, 1), include_lowest=True)
df["counts"] = df.groupby(df["bins"]).transform("count")

我想要实现的是我想跨数据框的预定义窗口应用相同的功能。例如,如果窗口值为 10,它应该为每个连续的 10 个周期创建相同的“绑定”和“计数”值。我知道我可以使用df["a"].rolling(10),但我无法将它与cut函数相关联。有没有有效的方法来做到这一点?

标签: pythonpandasdataframe

解决方案


你可以使用滚动应用

df = pd.DataFrame({"a": np.random.randint(1, high=10, size=50)})
def f(s):
    d = s.to_frame().groupby(pd.cut(s, np.arange(s.min(), s.max()*1.01, 1), include_lowest=True)).transform("count")
    return d[0].mean()

df["a"].rolling(10).apply(f)

推荐阅读