python - Pandas 在数据框列上滑动窗口
问题描述
我是熊猫新手。我正在使用 pandas 将时间戳记录的 CSV 文件读入数据帧。数据具有以下列:
时间戳 COLUMN_A COLUMN_B COLUMN_C
将数据读入数据框后,我希望能够在 COLUMN_C 上运行窗口函数;该函数应返回列的时间戳值。
我写了一些适用于可迭代的东西:
import collections
import itertools
def sliding_window_iter(iterable, size):
"""Iterate through iterable using a sliding window of several elements.
Creates an iterable where each element is a tuple of `size`
consecutive elements from `iterable`, advancing by 1 element each
time. For example:
>>> list(sliding_window_iter([1, 2, 3, 4], 2))
[(1, 2), (2, 3), (3, 4)]
"""
iterable = iter(iterable)
window = collections.deque(
itertools.islice(iterable, size-1),
maxlen=size
)
for item in iterable:
window.append(item)
yield tuple(window)
如何修改它以在数据框的列上工作?
解决方案
连续切片数据帧更简单。既然你想要重叠 windows [(1, 2), (2, 3), (3, 4), ...]
,你可以这样写:
def sliding_window_iter(series, size):
"""series is a column of a dataframe"""
for start_row in range(len(series) - size + 1):
yield series[start_row:start_row + size]
用法:
df = pd.DataFrame({'A': list(range(100, 501, 100)),
'B': list(range(-20, -15)),
'C': [0, 1, 2, None, 4]},
index=pd.date_range('2021-01-01', periods=5))
list(sliding_window_iter(df['C'], 2))
输出:
[2021-01-01 0.0
2021-01-02 1.0
Freq: D, Name: C, dtype: float64,
2021-01-02 1.0
2021-01-03 2.0
Freq: D, Name: C, dtype: float64,
2021-01-03 2.0
2021-01-04 NaN
Freq: D, Name: C, dtype: float64,
2021-01-04 NaN
2021-01-05 4.0
Freq: D, Name: C, dtype: float64]
如果您传入多个列,也可以使用:
list(sliding_window_iter(df.loc[:, ['A', 'C']], 2))
#output:
[ A C
2021-01-01 100 0.0
2021-01-02 200 1.0,
A C
2021-01-02 200 1.0
2021-01-03 300 2.0,
A C
2021-01-03 300 2.0
2021-01-04 400 NaN,
A C
2021-01-04 400 NaN
2021-01-05 500 4.0]
推荐阅读
- python - Pandas to_sql 使用带有大数组的 sqlalchemy 生成错误
- sql-server - 如何为链接表设置列默认值?
- css - 这怎么可能使用任何 CSS 布局(网格、flexbox ..)
- javascript - 如何使溢出容器可拖动
- c++ - 如何使用winapi单击另一个应用程序上的按钮?
- vb.net - 选择粗体、斜体或下划线时如何保留字体样式和大小?
- angular - 使用 ToggleButton ($event) 出现 Angular 错误——发出事件
- c++ - 编译器显示中止调用
- angular - Angular 的 Keycloak 不发送图像的不记名身份验证
- github - 在 coingecko API 上获取所有加密货币 github 存储库