2017-06-03 147 views
2

我有这样一组数据:蟒蛇/从时间表大熊猫TIMEDATE数据帧

Unnamed: 0 0:30 1:00 1:30 2:00 2:30 3:00 3:30 4:00 4:30 ... \ 
0 2016-01-01 26.9 26.4 26.9 26.1 26.4 26.7 26.5 25.5 25.4 ...  
1 2016-01-02 26.8 25.9 25.7 26.0 25.2 25.3 25.6 25.0 25.1 ...  
2 2016-01-03 25.6 25.4 25.2 25.5 24.5 24.5 24.9 24.6 24.3 ...  
3 2016-01-04 24.9 24.2 23.7 23.5 23.4 23.4 23.6 23.3 23.7 ... 
..   ... ... ... ... ... ... ... ... ... ... ... 
361 2016-12-27 15.6 15.5 15.5 15.7 16.1 16.2 16.3 16.2 16.2 ...  
362 2016-12-28 15.3 15.7 16.3 16.4 16.2 16.1 16.3 16.1 16.2 ...  
363 2016-12-29 15.9 16.3 16.1 16.4 16.4 16.2 16.1 16.1 15.9 ...  
364 2016-12-30 16.2 16.3 16.3 16.3 16.2 16.3 16.3 16.3 16.3 ...  
365 2016-12-31 16.1 16.0 16.2 16.3 16.2 16.2 16.3 16.3 16.3 ... 

,我想用日期+时间在各行各值重新排列。是这样的:

0 2016-01-01 0:30 26.9 
1 2016-01-01 1:00 26.4 
2 2016-01-01 1:30 26.9 
3 2016-01-01 2:00 26.1 

,但我还没有线索如何将值转换成一个新的数据帧追加不反复(这是很慢的,因为我有几个大的数据集)

我想是这样

df = pd.DataFrame(index = data['Unnamed: 0'] + ' ' + data.columns[1:len(data.columns)]) 

,但这是不正确的 - 它是数据结构,我不明白,我认为

想法?感谢

回答

1

@ A-杂志-Z的回答是我的第一个想法......但如果你想在新的索引值是时间戳,其中包括时间从列中的元素...

  • ​​获得日期,指数,所以我可以很容易地抢
  • 转列中的所有值转换成时间增量
  • 我转ndex为日期时间
  • 使用numpy广播生成所有时间戳
  • 构建新系列ravel d值和时间戳

d1 = df.set_index('Unnamed: 0') 

td = pd.to_timedelta(d1.columns + ':00').values 
ts = pd.to_datetime(d1.index).values 

pd.Series(
    d1.values.ravel(), 
    (ts[:, None] + td).ravel() 
) 

输出:

2016-01-01 00:30:00 26.9 
2016-01-01 01:00:00 26.4 
2016-01-01 01:30:00 26.9 
2016-01-01 02:00:00 26.1 
2016-01-01 02:30:00 26.4 
2016-01-01 03:00:00 26.7 
2016-01-01 03:30:00 26.5 
2016-01-01 04:00:00 25.5 
2016-01-01 04:30:00 25.4 
2016-01-02 00:30:00 26.8 
2016-01-02 01:00:00 25.9 
2016-01-02 01:30:00 25.7 
2016-01-02 02:00:00 26.0 
2016-01-02 02:30:00 25.2 
2016-01-02 03:00:00 25.3 
2016-01-02 03:30:00 25.6 
2016-01-02 04:00:00 25.0 
2016-01-02 04:30:00 25.1 
2016-01-03 00:30:00 25.6 
2016-01-03 01:00:00 25.4 
2016-01-03 01:30:00 25.2 
2016-01-03 02:00:00 25.5 
2016-01-03 02:30:00 24.5 
2016-01-03 03:00:00 24.5 
2016-01-03 03:30:00 24.9 
2016-01-03 04:00:00 24.6 
2016-01-03 04:30:00 24.3 
2016-01-04 00:30:00 24.9 
2016-01-04 01:00:00 24.2 
2016-01-04 01:30:00 23.7 
         ... 
2016-12-28 03:30:00 16.3 
2016-12-28 04:00:00 16.1 
2016-12-28 04:30:00 16.2 
2016-12-29 00:30:00 15.9 
2016-12-29 01:00:00 16.3 
2016-12-29 01:30:00 16.1 
2016-12-29 02:00:00 16.4 
2016-12-29 02:30:00 16.4 
2016-12-29 03:00:00 16.2 
2016-12-29 03:30:00 16.1 
2016-12-29 04:00:00 16.1 
2016-12-29 04:30:00 15.9 
2016-12-30 00:30:00 16.2 
2016-12-30 01:00:00 16.3 
2016-12-30 01:30:00 16.3 
2016-12-30 02:00:00 16.3 
2016-12-30 02:30:00 16.2 
2016-12-30 03:00:00 16.3 
2016-12-30 03:30:00 16.3 
2016-12-30 04:00:00 16.3 
2016-12-30 04:30:00 16.3 
2016-12-31 00:30:00 16.1 
2016-12-31 01:00:00 16.0 
2016-12-31 01:30:00 16.2 
2016-12-31 02:00:00 16.3 
2016-12-31 02:30:00 16.2 
2016-12-31 03:00:00 16.2 
2016-12-31 03:30:00 16.3 
2016-12-31 04:00:00 16.3 
2016-12-31 04:30:00 16.3 
Length: 81, dtype: float64 
+0

好这个w orks很棒@piRSquared。但是我不明白你对时间差异所做的举动,然后将它们与时间序列结合起来。当检查timedeltas值我得到了:[1800000000000 3600000000000 5400000000000 ...,82800000000000 84600000000000 0] - 这对我没有意义。 –

+0

@NoamNaveh这些都是纳秒 – piRSquared

+0

@NoamNaveh也可以自由地上传。谢谢 – piRSquared

2

您可以使用大熊猫堆栈()这个

df.set_index('Unnamed: 0').stack().reset_index() 

    Unnamed: 0 level_1 0 
0 2016-01-01 0:30 26.9 
1 2016-01-01 1:00 26.4 
2 2016-01-01 1:30 26.9 
3 2016-01-01 2:00 26.1 
4 2016-01-01 2:30 26.4 
5 2016-01-01 3:00 26.7 
6 2016-01-01 3:30 26.5 
7 2016-01-01 4:00 25.5 
8 2016-01-01 4:30 25.4 
9 2016-01-02 0:30 26.8 
10 2016-01-02 1:00 25.9 
11 2016-01-02 1:30 25.7 
12 2016-01-02 2:00 26.0 
13 2016-01-02 2:30 25.2 
14 2016-01-02 3:00 25.3 
15 2016-01-02 3:30 25.6