Python 如何计算滑动窗口结果并将其写入csv?
我有一个csv数据文件,如下所示: 我想得到这样的结果: 我还想将结果保存到csv文件中 到目前为止,我尝试使用滑动窗口:Python 如何计算滑动窗口结果并将其写入csv?,python,pandas,dataframe,data-analysis,Python,Pandas,Dataframe,Data Analysis,我有一个csv数据文件,如下所示: 我想得到这样的结果: 我还想将结果保存到csv文件中 到目前为止,我尝试使用滑动窗口: def window(iterable, size=3): i = iter(iterable) win = [] for e in range(0, size): win.append(next(i)) yield win for e in i: win = win[1:] + [e]
def window(iterable, size=3):
i = iter(iterable)
win = []
for e in range(0, size):
win.append(next(i))
yield win
for e in i:
win = win[1:] + [e]
yield win
X = [188,122,222,222,222,222,222,222,222,222]
count = 0
for w in window(X):
print(w)
count = count + 1
print(count)
if count == 10:
break
一个选项是创建自己的滚动聚合函数:
def rolling_agg_list(src_frame, cols, window):
frame = src_frame[cols]
d = {v: list for v in cols}
values = [frame.iloc[i:i + window].agg(d)
for i in range(len(frame) - window + 1)]
return pd.DataFrame(values, columns=cols)
new_df = rolling_agg_list(df, ['X', 'Y', 'Z'], 3)
要写入CSV,只需调用新的数据帧:
new_df.to_csv('out.csv', index=False)
示例df
:
import numpy as np
import pandas as pd
np.random.seed(5)
df = pd.DataFrame({
'ID': np.arange(1, 11),
'X': np.random.randint(118, 122, size=10),
'Y': np.random.random(size=10) * 2 - 1,
'Z': np.random.random(size=10) * 2 - 1
})
ID X Y Z
0 1 121 0.223488 -0.451827
1 2 120 0.531816 -0.171530
2 3 121 0.036836 -0.407840
3 4 119 -0.406399 0.257576
4 5 120 -0.624558 0.159676
5 6 120 -0.838517 0.199858
6 7 118 0.476881 -0.468362
7 8 119 -0.117382 -0.430628
8 9 118 -0.683380 -0.492824
9 10 118 0.759874 -0.344872
X Y Z
0 [121.0, 120.0, 121.0] [0.22348772580529142, 0.5318157129606311, 0.036835975745886484] [-0.4518270760155507, -0.17152996183789737, -0.40784013453270407]
1 [120.0, 121.0, 119.0] [0.5318157129606311, 0.036835975745886484, -0.4063989968475561] [-0.17152996183789737, -0.40784013453270407, 0.25757581775896665]
2 [121.0, 119.0, 120.0] [0.036835975745886484, -0.4063989968475561, -0.6245575426774967] [-0.40784013453270407, 0.25757581775896665, 0.1596756203790901]
3 [119.0, 120.0, 120.0] [-0.4063989968475561, -0.6245575426774967, -0.8385174624702503] [0.25757581775896665, 0.1596756203790901, 0.19985839324997512]
4 [120.0, 120.0, 118.0] [-0.6245575426774967, -0.8385174624702503, 0.47688059239794] [0.1596756203790901, 0.19985839324997512, -0.4683617649289855]
5 [120.0, 118.0, 119.0] [-0.8385174624702503, 0.47688059239794, -0.11738155420809382] [0.19985839324997512, -0.4683617649289855, -0.4306282387172724]
6 [118.0, 119.0, 118.0] [0.47688059239794, -0.11738155420809382, -0.6833802645746976] [-0.4683617649289855, -0.4306282387172724, -0.492823588452425]
7 [119.0, 118.0, 118.0] [-0.11738155420809382, -0.6833802645746976, 0.7598740624025577] [-0.4306282387172724, -0.492823588452425, -0.3448721046225318]
df
:
import numpy as np
import pandas as pd
np.random.seed(5)
df = pd.DataFrame({
'ID': np.arange(1, 11),
'X': np.random.randint(118, 122, size=10),
'Y': np.random.random(size=10) * 2 - 1,
'Z': np.random.random(size=10) * 2 - 1
})
ID X Y Z
0 1 121 0.223488 -0.451827
1 2 120 0.531816 -0.171530
2 3 121 0.036836 -0.407840
3 4 119 -0.406399 0.257576
4 5 120 -0.624558 0.159676
5 6 120 -0.838517 0.199858
6 7 118 0.476881 -0.468362
7 8 119 -0.117382 -0.430628
8 9 118 -0.683380 -0.492824
9 10 118 0.759874 -0.344872
X Y Z
0 [121.0, 120.0, 121.0] [0.22348772580529142, 0.5318157129606311, 0.036835975745886484] [-0.4518270760155507, -0.17152996183789737, -0.40784013453270407]
1 [120.0, 121.0, 119.0] [0.5318157129606311, 0.036835975745886484, -0.4063989968475561] [-0.17152996183789737, -0.40784013453270407, 0.25757581775896665]
2 [121.0, 119.0, 120.0] [0.036835975745886484, -0.4063989968475561, -0.6245575426774967] [-0.40784013453270407, 0.25757581775896665, 0.1596756203790901]
3 [119.0, 120.0, 120.0] [-0.4063989968475561, -0.6245575426774967, -0.8385174624702503] [0.25757581775896665, 0.1596756203790901, 0.19985839324997512]
4 [120.0, 120.0, 118.0] [-0.6245575426774967, -0.8385174624702503, 0.47688059239794] [0.1596756203790901, 0.19985839324997512, -0.4683617649289855]
5 [120.0, 118.0, 119.0] [-0.8385174624702503, 0.47688059239794, -0.11738155420809382] [0.19985839324997512, -0.4683617649289855, -0.4306282387172724]
6 [118.0, 119.0, 118.0] [0.47688059239794, -0.11738155420809382, -0.6833802645746976] [-0.4683617649289855, -0.4306282387172724, -0.492823588452425]
7 [119.0, 118.0, 118.0] [-0.11738155420809382, -0.6833802645746976, 0.7598740624025577] [-0.4306282387172724, -0.492823588452425, -0.3448721046225318]
new_df
:
import numpy as np
import pandas as pd
np.random.seed(5)
df = pd.DataFrame({
'ID': np.arange(1, 11),
'X': np.random.randint(118, 122, size=10),
'Y': np.random.random(size=10) * 2 - 1,
'Z': np.random.random(size=10) * 2 - 1
})
ID X Y Z
0 1 121 0.223488 -0.451827
1 2 120 0.531816 -0.171530
2 3 121 0.036836 -0.407840
3 4 119 -0.406399 0.257576
4 5 120 -0.624558 0.159676
5 6 120 -0.838517 0.199858
6 7 118 0.476881 -0.468362
7 8 119 -0.117382 -0.430628
8 9 118 -0.683380 -0.492824
9 10 118 0.759874 -0.344872
X Y Z
0 [121.0, 120.0, 121.0] [0.22348772580529142, 0.5318157129606311, 0.036835975745886484] [-0.4518270760155507, -0.17152996183789737, -0.40784013453270407]
1 [120.0, 121.0, 119.0] [0.5318157129606311, 0.036835975745886484, -0.4063989968475561] [-0.17152996183789737, -0.40784013453270407, 0.25757581775896665]
2 [121.0, 119.0, 120.0] [0.036835975745886484, -0.4063989968475561, -0.6245575426774967] [-0.40784013453270407, 0.25757581775896665, 0.1596756203790901]
3 [119.0, 120.0, 120.0] [-0.4063989968475561, -0.6245575426774967, -0.8385174624702503] [0.25757581775896665, 0.1596756203790901, 0.19985839324997512]
4 [120.0, 120.0, 118.0] [-0.6245575426774967, -0.8385174624702503, 0.47688059239794] [0.1596756203790901, 0.19985839324997512, -0.4683617649289855]
5 [120.0, 118.0, 119.0] [-0.8385174624702503, 0.47688059239794, -0.11738155420809382] [0.19985839324997512, -0.4683617649289855, -0.4306282387172724]
6 [118.0, 119.0, 118.0] [0.47688059239794, -0.11738155420809382, -0.6833802645746976] [-0.4683617649289855, -0.4306282387172724, -0.492823588452425]
7 [119.0, 118.0, 118.0] [-0.11738155420809382, -0.6833802645746976, 0.7598740624025577] [-0.4306282387172724, -0.492823588452425, -0.3448721046225318]
CSV输出示例:
X,Y,Z
"[121.0, 120.0, 121.0]","[0.22348772580529142, 0.5318157129606311, 0.036835975745886484]","[-0.4518270760155507, -0.17152996183789737, -0.40784013453270407]"
"[120.0, 121.0, 119.0]","[0.5318157129606311, 0.036835975745886484, -0.4063989968475561]","[-0.17152996183789737, -0.40784013453270407, 0.25757581775896665]"
"[121.0, 119.0, 120.0]","[0.036835975745886484, -0.4063989968475561, -0.6245575426774967]","[-0.40784013453270407, 0.25757581775896665, 0.1596756203790901]"
"[119.0, 120.0, 120.0]","[-0.4063989968475561, -0.6245575426774967, -0.8385174624702503]","[0.25757581775896665, 0.1596756203790901, 0.19985839324997512]"
"[120.0, 120.0, 118.0]","[-0.6245575426774967, -0.8385174624702503, 0.47688059239794]","[0.1596756203790901, 0.19985839324997512, -0.4683617649289855]"
"[120.0, 118.0, 119.0]","[-0.8385174624702503, 0.47688059239794, -0.11738155420809382]","[0.19985839324997512, -0.4683617649289855, -0.4306282387172724]"
"[118.0, 119.0, 118.0]","[0.47688059239794, -0.11738155420809382, -0.6833802645746976]","[-0.4683617649289855, -0.4306282387172724, -0.492823588452425]"
"[119.0, 118.0, 118.0]","[-0.11738155420809382, -0.6833802645746976, 0.7598740624025577]","[-0.4306282387172724, -0.492823588452425, -0.3448721046225318]"
运行此操作时,我遇到构造错误。ValueError:传递值的形状是(1,8),索引暗示(3,8)“您使用的是什么版本?另外,您在提供的示例数据帧上遇到此错误,或者您向窗口函数传递了不同的数据帧?