[英]How to perform windowed operation on dataframe?
鑒於
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
我想對dataframe進行滑動window操作。
我想在任意大小、任意步長的滑動 window 上執行一般的 function(在本例中是指,但它可以是另一個 function 並且涉及多個輸入列)。
在這種情況下,window 大小為 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
不是我要找的。
我可以 go 到 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"
這首先使用自定義 function 執行行縮減,然后執行窗口列縮減。
如果 windows 沒有重疊,您可以使用groupby
。
我認為您需要GroupBy.transform
與 integer 師:
#if default RangeIndex
ssss['res'] = ssss.groupby(ssss.index // 2)[0].transform('mean')
#any index - helper array
ssss['res'] = ssss.groupby(np.arange(len(ssss)) // 2)[0].transform('mean')
print (ssss)
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
編輯:
print (df)
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) + str(col1)
def col_reduce(rows_data):
return ",".join(rows_data)
df['res'] = (df.apply(lambda x: row_reduce(x[0], x[1]), axis=1)
.groupby(df.index // 2)
.transform(col_reduce))
print (df)
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.