【发布时间】:2020-10-27 20:39:15
【问题描述】:
给定
import pandas as pd
import numpy as np
ssss = pd.DataFrame(np.arange(6))
ssss:
0
0 0
1 1
2 2
3 3
4 4
5 5
我想对数据框进行滑动窗口操作。
我想在任意大小的滑动窗口上以任意步幅执行 general 函数(在这种情况下意味着,但它可以是另一个函数并且涉及多个输入列)。
在这种情况下,窗口大小为2,步长也为2。
pandas 支持这种操作吗?
回复:
0 res
0 0 0.5
1 1 0.5
2 2 2.5
3 3 2.5
4 4 4.5
5 5 4.5
看来groupby 不是我要找的。p>
我可以使用 numpy 解决方案,但即便如此我也不确定标准方法是什么。我希望 pandas 支持这样的东西,但找不到任何方法可以做到这一点。
编辑:
ssss:
假设第 1 列的值是字符串
0 1 2
0 0 "5" a
1 1 "4" b
2 2 "3" c
3 3 "2" d
4 4 "1" e
5 5 "0" f
我想用作一个非常普遍的例子
def row_reduce(col0, col1):
return str(2 * col0) + col1
def col_reduce(rows_data):
return ",".join(rows_data)
获取(忽略第 2 列)
0 1 2 res
0 0 "5" a "05,24"
1 1 "4" b "05,24"
2 2 "3" c "43,62"
3 3 "2" d "43,62"
4 4 "1" e "81,100"
5 5 "0" f "81,100"
这首先使用自定义函数执行行缩减,然后执行窗口列缩减。
【问题讨论】:
-
有 rolling 但令我非常失望的是步长仍然硬编码为 1。
-
@timgeb 我实际上想过这个问题,并且想知道如果步长不是 1 会是什么预期输出。我认为这没有多大意义。