Python 熊猫中的滑动窗口分组
如何使用groupby为Pandas中的计算创建滑动窗口?假设我有一个如下所示的数据帧:Python 熊猫中的滑动窗口分组,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,如何使用groupby为Pandas中的计算创建滑动窗口?假设我有一个如下所示的数据帧: df = pd.DataFrame({'type': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], 'data': [1,10,2,4,3,4,5,6]}) df type data 0 A 1 1 A 10 2 A 2 3 A 4 4 B 3 5 B 4 6 B
df = pd.DataFrame({'type': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], 'data': [1,10,2,4,3,4,5,6]})
df
type data
0 A 1
1 A 10
2 A 2
3 A 4
4 B 3
5 B 4
6 B 5
7 B 6
对于数据框中的每一个类型
,我想以滑动比例确定第一行和第三行之间的标准偏差(并且只有那些,忽略第二行中的数据)。这意味着对于A,我希望使用这些行来查找第一个std dev:
type data
0 A 1 <----
1 A 10
2 A 2 <----
3 A 4
编辑:滚动似乎不起作用。我只想要用于std()
的端点,而不是整个窗口。例如,第一个计算应该是std([1,2])
,因为我们将只查看索引0和2,而忽略索引1中的值。rolling
重复的:可能解决方案是相同的(可能),但在通过滑动窗口搜索pandas groupby时未出现该结果。此外,现在滚动似乎不起作用,因此可能不是输出不正确的重复。我希望在索引0和1处看到一个值,而不是在2和3处。看起来在末尾添加一个.shift(-2)会起作用。如果有更好的方法,让我知道实际上@piRSquared,这不起作用,我的错误是选择了坏的示例数据。rolling函数使用整个窗口进行std()计算,我只想使用索引0和2,似乎rolling只做它所说的,一个滚动计算,使用窗口中的所有内容。我只想使用极值/端点,如果这只是使用正确的值,我希望std为~1.41。我更新了这个问题,所以数字更极端。
df.groupby('type')。rolling(2.std()
给出了~1.41
type data
0 A 1
1 A 10 <----
2 A 2
3 A 4 <----
df.groupby(df.type).sliding_window(slide=2).std()
df.groupby('type').rolling(3).std()
data
type
A 0 NaN
1 NaN
2 1.0
3 1.0
B 4 NaN
5 NaN
6 1.0
7 1.0