首页 > 解决方案 > 将行中的每小时数据转置到新列 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 

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

在此处输入图像描述

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

标签: pythonpandastranspose

解决方案


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

推荐阅读