在Python中每3列添加小时值

时间:2018-06-09 09:47:20

标签: python pandas

想象一下如下所示的原始数据框:

enter image description here

为了能够处理数据,我希望重新排列它,以便每3列(代表每天的每小时值)创建一个日期时间<的新行/ strong>值(例如2015-05-31 00:00:002015-05-31 01:00:002015-05-31 02:00:00等),最终只有4列:DateTmin,{ {1}}和Tmax

这里是导入的CSV中的原始字典(只有几行):

Nsum

1 个答案:

答案 0 :(得分:1)

首先创建DatetimeIndex,然后重塑3列的值,按numpy.repeat创建新索引:

df = df.set_index('Date')

df = pd.DataFrame(df.values.reshape(-1, 3), 
                  index=pd.to_datetime(np.repeat(df.index, len(df.columns) // 3)),
                  columns=['Tmin', 'Tmax', 'Nsum'])

最后通过将模数转换为hour来添加timedelta

df.index += pd.to_timedelta(np.arange(len(df)) % 24, unit='h')
df = df.rename_axis('Date').reset_index()
print (df.head(30))
                  Date  Tmin  Tmax  Nsum
0  2015-04-30 00:00:00  11.7  11.9   0.0
1  2015-04-30 01:00:00  11.6  11.8   0.0
2  2015-04-30 02:00:00  10.2  11.2   0.0
3  2015-04-30 03:00:00   9.2   9.8   0.0
4  2015-04-30 04:00:00   8.8   9.2   0.0
5  2015-04-30 05:00:00   8.4   8.6   0.1
6  2015-04-30 06:00:00   8.6   8.7   0.0
7  2015-04-30 07:00:00   8.5   8.7   0.0
8  2015-04-30 08:00:00   8.4   8.4   1.4
9  2015-04-30 09:00:00   7.0   8.3   2.9
10 2015-04-30 10:00:00   6.7   6.9   2.9
11 2015-04-30 11:00:00   6.5   6.6   3.7
12 2015-04-30 12:00:00   6.7   7.3   1.1
13 2015-04-30 13:00:00   7.6   8.8   0.0
14 2015-04-30 14:00:00   9.5  11.4   0.0
15 2015-04-30 15:00:00  11.4  12.6   0.0
16 2015-04-30 16:00:00  12.6  13.4   0.0
17 2015-04-30 17:00:00  13.7  14.1   0.0
18 2015-04-30 18:00:00  12.9  13.9   0.0
19 2015-04-30 19:00:00  11.0  12.2   0.0
20 2015-04-30 20:00:00   9.9  10.9   0.0
21 2015-04-30 21:00:00  10.2  10.5   0.0
22 2015-04-30 22:00:00   9.1  10.2   0.0
23 2015-04-30 23:00:00   9.1   9.6   0.0
24 2015-05-01 00:00:00   8.3   8.9   0.0
25 2015-05-01 01:00:00   8.0   8.2   0.1
26 2015-05-01 02:00:00   7.9   8.1   0.0
27 2015-05-01 03:00:00   7.5   7.8   0.0
28 2015-05-01 04:00:00   7.0   7.5   0.0
29 2015-05-01 05:00:00   7.0   7.1   0.0