我有一个数据集,其中包含从11月1日到11月15日每分钟收集的数据。时间是一列,从11/1/2016 00:00:00
开始,到11/15/2016 23:59:59 I am trying to reshape this dataset, so that each minute is a column, and each day is a row. So
[第1行,第1列] {{ 1}} [第2行,第1列]`数据将在11月12日的12:00,等等。目前,我的数据集
我正在尝试使用reshape函数,如果我检查值,它们就无法正确匹配。在我的代码中,would have the data at 12:00 on 11/1, and
的第2列是我需要重新整形的数据,我有1440列,因为这是一天中的分钟数。 15行,因为这是我在数据集中的天数。
我知道哪里出错了?
myData
我的数组在重塑之后,目前看起来如下:
myData = pd.read_csv("Nov1-15.csv")
myData = [myData.iloc[:,2]]
myData = np.asarray(myData)
myData = np.reshape(myData, (1440,15))
myData = np.transpose(myData)
我从csv读取并隔离第二列后,我的原始数据集如下所示:
array([[ 137., 138., 136., ..., 345., 614., 337.],
[ 137., 137., 138., ..., 340., 611., 337.],
[ 138., 136., 138., ..., 373., 611., 336.],
...,
[ 137., 138., 409., ..., 615., 336., 214.],
[ 136., 136., 412., ..., 614., 334., 214.],
[ 138., 136., 411., ..., 617., 339., 215.]])
示例数据:
[0 137.0
1 137.0
2 138.0
3 137.0
4 136.0
5 138.0
6 137.0
7 141.0
8 137.0
9 139.0
10 136.0
11 136.0
12 137.0
13 136.0
14 138.0
15 138.0
16 137.0
17 136.0
18 138.0
19 137.0
20 137.0
21 138.0
22 138.0
23 137.0
24 135.0
25 138.0
26 138.0
27 138.0
28 136.0
29 136.0
...
21570 614.0
21571 611.0
21572 611.0
21573 611.0
21574 610.0
21575 570.0
21576 346.0
21577 341.0
21578 337.0
21579 337.0
21580 336.0
21581 337.0
21582 336.0
21583 334.0
21584 339.0
21585 337.0
21586 337.0
21587 336.0
21588 238.0
21589 222.0
21590 222.0
21591 220.0
21592 217.0
21593 217.0
21594 214.0
21595 214.0
21596 278.0
21597 214.0
21598 214.0
21599 215.0
答案 0 :(得分:2)
重塑:
尝试改变:
myData = np.reshape(myData, (1440,15))
为:
myData = np.reshape(myData, (15, 1440))
演示:
3行,4列:
In [333]: np.arange(12).reshape(3,4)
Out[333]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
4行,3列:
In [334]: np.arange(12).reshape(4,3)
Out[334]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
熊猫解决方案:
使用pivot方法,如果您没有滞后(缺少数据分钟):
In [48]: df
Out[48]:
ts val
0 2016-11-16 00:00:00 213
1 2016-11-16 00:01:00 214
2 2016-11-16 00:02:00 213
3 2016-11-16 00:03:00 213
4 2016-11-16 00:04:00 210
5 2016-11-16 00:05:00 210
6 2016-11-16 00:06:00 209
7 2016-11-16 00:07:00 209
In [50]: df.assign(d=df.ts.dt.date, m=df.ts.dt.minute) \
.pivot(index='d', columns='m', values='val')
Out[50]:
m 0 1 2 3 4 5 6 7
d
2016-11-16 213 214 213 213 210 210 209 209
否则使用pivot_table()方法:
In [52]: df.assign(d=df.ts.dt.date, m=df.ts.dt.minute) \
.pivot_table(index='d', columns='m', values='val', aggfunc='mean', fill_value=0)
Out[52]:
m 0 1 2 3 4 5 6 7
d
2016-11-16 213 214 213 213 210 210 209 209