繁体   English   中英

将行中的每小时数据转换为新列 Pandas

[英]Transpose hourly data in rows to new columns Pandas

我有一个记录每小时天气数据的表格,如下所示:

在此处输入图片说明

                        Year Month  Day Time   Temp     
    Date/Time                                                   
    2005-01-01 00:00:00 2005    1   1   0:00    6.0 
    2005-01-01 01:00:00 2005    1   1   1:00    6.1 
    2005-01-01 02:00:00 2005    1   1   2:00    6.7 
    2005-01-01 03:00:00 2005    1   1   3:00    6.8 
    2005-01-01 04:00:00 2005    1   1   4:00    6.3 
    2005-01-01 05:00:00 2005    1   1   5:00    6.6 
    2005-01-01 06:00:00 2005    1   1   6:00    6.9 
    2005-01-01 07:00:00 2005    1   1   7:00    7.1 
    2005-01-01 08:00:00 2005    1   1   8:00    6.9 
    2005-01-01 09:00:00 2005    1   1   9:00    6.7 
    2005-01-01 10:00:00 2005    1   1   10:00   7.1 
    2005-01-01 11:00:00 2005    1   1   11:00   7.1 
    2005-01-01 12:00:00 2005    1   1   12:00   7.2 
    2005-01-01 13:00:00 2005    1   1   13:00   7.7 
    2005-01-01 14:00:00 2005    1   1   14:00   8.8 
    2005-01-01 15:00:00 2005    1   1   15:00   8.6 
    2005-01-01 16:00:00 2005    1   1   16:00   7.4 
    2005-01-01 17:00:00 2005    1   1   17:00   6.8 
    2005-01-01 18:00:00 2005    1   1   18:00   6.3 
    2005-01-01 19:00:00 2005    1   1   19:00   5.9 
    2005-01-01 20:00:00 2005    1   1   20:00   5.6 
    2005-01-01 21:00:00 2005    1   1   21:00   3.6 
    2005-01-01 22:00:00 2005    1   1   22:00   2.6 
    2005-01-01 23:00:00 2005    1   1   23:00   1.7 

我想以这种格式保存数据框:

在此处输入图片说明

如何转置数据框并为每条记录创建新列?

1) 复制以下数据

        Date/Time       Year    Month   Day  Time   Temp
0       1/1/2005 0:00   2005    1       1   0:00    6.0
1       1/1/2005 1:00   2005    1       1   1:00    6.1
2       1/1/2005 2:00   2005    1       1   2:00    6.7
3       1/1/2005 3:00   2005    1       1   3:00    6.8
4       1/1/2005 4:00   2005    1       1   4:00    6.3
5       1/1/2005 5:00   2005    1       1   5:00    6.6
6       1/1/2005 6:00   2005    1       1   6:00    6.9
7       1/1/2005 7:00   2005    1       1   7:00    7.1
8       1/1/2005 8:00   2005    1       1   8:00    6.9
9       1/1/2005 9:00   2005    1       1   9:00    6.7
10      1/1/2005 10:00  2005    1       1   10:00   7.1
11      1/1/2005 11:00  2005    1       1   11:00   7.1
12      1/1/2005 12:00  2005    1       1   12:00   7.2

2) 由于日期/时间列中的空间,使用带有双倍空格或更多参数的 pd.read_clipboard

import pandas as pd
df=pd.read_clipboard('\s\s+')
df

3)格式化日期/时间列并创建数据透视表并重置/重命名轴。

df['Date/Time']=pd.to_datetime(df['Date/Time'],format='%m/%d/%Y 
%H:%M').dt.strftime('%m/%d/%Y')
df['Time']=pd.to_datetime(df['Time']).dt.time
df=pd.pivot_table(df, index='Date/Time', columns='Time', values='Temp').reset_index().rename_axis(index=None, columns=None)
df['Date/Time']=df['Date/Time'].apply(lambda x:(x + ' 0:00'))
df

输出:

Date/Time  00:00:00  01:00:00  02:00:00  03:00:00  04:00:00  05:00:00  06:00:00  07:00:00  08:00:00  09:00:00  10:00:00  11:00:00  12:00:00
01/01/2005      6.0      6.1      6.7      6.8          6.3      6.6        6.9  7.1       6.9         6.7         7.1        7.1       7.2

这与之前的答案类似,但在一个新的日期列上,每天只创建一行:

datetimes = pd.date_range("2005-01-01 00:00:00","2005-01-02 23:00:00", freq="1h")
df = pd.DataFrame({"Date/Time": datetimes, "temp": rand(len(datetimes))})
df["Date"] = df["Date/Time"].dt.date
df["Hour"] = df["Date/Time"].dt.hour
reshaped= df.pivot(index='Date', columns='Hour', values='temp')
reshaped.columns = ['HR'+str(hour) for hour in reshaped.columns]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM