无法为每日时间序列重塑我的数据

Trouble reshaping my data for daily time series

我有一个数据集,其中包含从 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 列] would have the data at 12:00 on 11/1, and[第 2 行,第 1 列]` 将在 11 月 2 日的 12:00 处获得数据,依此类推。目前,我的数据集

我正在尝试使用重塑函数,如果我检查值,它们没有正确匹配。在我的代码中,myData 的第 2 列是我需要重塑的数据,我有 1440 列,因为那是一天中的分钟数。 15 行,因为那是我数据集中的天数。

知道我可能哪里出错了吗?

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)

我的数组在重塑后看起来如下所示:

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.]])

我的原始数据集如下所示,在我从 csv 中读取它并隔离第二列之后:

[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

示例数据:

11/1/2016 0:00      213
11/1/2016 0:01      214
11/1/2016 0:02      213
11/1/2016 0:03      213
11/1/2016 0:04      210
11/1/2016 0:05      210
11/1/2016 0:06      209
11/1/2016 0:07      209

重塑:

尝试改变:

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]])

Pandas 解决办法:

使用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