python - Python Dataframe 创建带有窗口的列表列的滚动聚合
问题描述
我有一个包含一列列表的 df。
import pandas as pd
import numpy as np
# Get some time series data
df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/timeseries.csv")
input_cols = ['A', 'B']
df['single_input_vector'] = df[input_cols].apply(tuple, axis=1).apply(list)
我想知道是否有办法为给定窗口创建“single_input_vector”列的滚动聚合。我查看了以下 SO 链接,但它没有提供包含窗口的方法。在我的情况下,窗口 3 的所需输出列将是:
Row1: [[24.68, 164.93]]
Row2: [[24.68, 164.93], [24.18, 164.89]]
Row3: [[24.68, 164.93], [24.18, 164.89], [23.99, 164.63]]
Row4: [[24.18, 164.89], [23.99, 164.63], [24.14, 163.92]]
等等。
解决方案
我想不出更有效的方法来做到这一点,所以虽然这确实有效,但海量数据集可能会受到性能限制。
我们基本上是使用滚动计数来创建一个 start:stop 切片索引集。
import pandas as pd
import numpy as np
# Get some time series data
df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/timeseries.csv")
input_cols = ['A', 'B']
df['single_input_vector'] = df[input_cols].apply(tuple, axis=1).apply(list)
window = 3
df['len'] = df['A'].rolling(window=window).count()
df['vector_list'] = df.apply(lambda x: df['single_input_vector'][max(0,x.name-(window-1)):int(x.name)+1].values, axis=1)
推荐阅读
- c++ - 如何获取断开套接字的连接信息?
- macos-big-sur - BigSur 鼠标控制
- angular-cli - 为什么在使用 --emitDecoratorMetadata 标志编译角度库时会收到警告?
- python - 中止失败片段的作业 yt-dlp
- snowflake-cloud-data-platform - 雪花 - 检查一个表中的列是否与另一表中的列的数据类型匹配
- arrays - 当数组是C中的struct类型时,如何检查条目数组的第一个条目是否为空?
- javascript - 在 JavaScript 中的 Object 中使用短路 (||)
- mysql - 带子查询的左连接 / 4 个表
- influxdb - 如何使用 lineprotocol 和 API 在 Influx 中插入多个点
- python - 在浏览器中查看 Matplotlib funcAnimation 实时绘图