Перенести почасовые данные в строках в новые столбцы Pandas - PullRequest
1 голос
/ 30 марта 2020

У меня в таблице записаны почасовые данные о погоде, например:

enter image description here

                        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 

Я хотел сохранить фрейм данных в этом формате:

enter image description here

Как перенести фрейм данных и создать новые столбцы для каждой записи?

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Это работает так же, как и в предыдущем ответе, но в новом столбце даты, так что создается только одна строка в день:

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]
1 голос
/ 30 марта 2020

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...