python - 在 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
函数相关联。有没有有效的方法来做到这一点?
解决方案
你可以使用滚动应用
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)
推荐阅读
- java - Kafka 消费者 - 暂停从特定 kafka 主题分区轮询事件以将其用作延迟队列
- c# - Get Collection (Products) of Objects for each item in a list
- php - How to get data from many to many relationship table and print all rows in one line PHP
- python-3.x - How to get rid of brackets around values within a numpy array? - Python
- java - 从 JPA 规范中获取现有参数
- google-cloud-platform - 想要使用 terraform 在 GCP 中部署具有公共可读存储对象权限的存储桶
- spring-boot - 来自来源 xxx 的 xxx 处的 XMLHttpRequest 已被 CORS 阻止:没有“Access-Control-Allow-Origin”标头
- python - 在 PyYAML 的构造函数中接受锚点(别名)
- php - 将 Laravel 连接到 XAMPP MySQL (MariaDB) 数据库 SQLSTATE[HY000] [2006] MySQL 服务器已消失
- reactjs - 元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“{...}”