我有 DataFrame,我想制作它的資料的子序列
d = pd.DataFrame({'t' : [1,2,3,4,5,6]})
x = []
window = 3
for i in range(0, len(d) - window 1):
x.append(d[i: i window].t.values)
pd.DataFrame(x, columns = ['t1','t2', 't3'])
我收到這樣的結果:
t1 t2 t3
0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6
它適用于大型 DataFrame,但速度很慢。是否有可能使程式更快?
uj5u.com熱心網友回復:
numpy只要您的版本是,您就可以使用> 1.20
import pandas as pd
from numpy.lib.stride_tricks import sliding_window_view
W = 3
pd.DataFrame(sliding_window_view(d['t'], W),
columns=[f't{i 1}' for i in range(W)])
# t1 t2 t3
#0 1 2 3
#1 2 3 4
#2 3 4 5
#3 4 5 6
uj5u.com熱心網友回復:
你可以在 Pandas 上使用這個技巧:
lst = []
df.rolling(3).apply(lambda x: lst.append(x.apply(int).tolist()) or 0)
result = pd.DataFrame.from_records(lst, columns=['t1','t2','t3'])
結果如下:
t1 t2 t3
0 1 2 3
1 2 3 4
2 3 4 5
3 4 5 6
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357495.html
下一篇:用Groupby替換值
