Pandas Concat список данных кадров на один кадр данных - PullRequest
0 голосов
/ 23 сентября 2018

Попытка объединить список фреймов данных в один фрейм данных.Данные выглядят так:

    Date        station_id  Hour    Temp
0   2004-01-01  1           1       46.0
1   2004-01-01  1           2       46.0
2   2004-01-01  1           3       45.0
3   2004-01-01  1           4       41.0
...
433730  2008-06-30  11      3       64.0
433731  2008-06-30  11      4       64.0
433732  2008-06-30  11      5       64.0
433733  2008-06-30  11      6       64.0

Это дает мне список фреймов данных:

stations = [x for _,x in df.groupby('station_id')] 

Когда я сбрасываю индексы для "станций", и concat, я могу получить фрейм данных, ноэто не похоже на то, что я хотел бы:

for i in range(0,11):
     stations[i].reset_index(drop=True,inplace=True)    

pd.concat(stations,axis=1)

    Date        station_id  Hour    Temp    Date        station_id  Hour    Temp
0   2004-01-01  1           1       46.0    2004-01-01  2           1       38.0
1   2004-01-01  1           2       46.0    2004-01-01  2           2       36.0
2   2004-01-01  1           3       45.0    2004-01-01  2           3       35.0
3   2004-01-01  1           4       41.0    2004-01-01  2           4       30.0

Я скорее прихожу к ДФ, как это:

    Date        Hour    Stn1    Stn2
0   2004-01-01  1       46.0    38.0
1   2004-01-01  2       46.0    6.0
2   2004-01-01  3       45.0    35.0
3   2004-01-01  4       41.0    30.0

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Для чего бы это ни стоило, это то, куда я хочу пойти.Приветствуются дополнительные питонические предложения.

0 голосов
/ 23 сентября 2018

Исходя из ожидаемого результата, вы ищете сводную таблицу с index=['Date', 'Hour'], columns='station_id', values=Temp.Демо:

# A bunch of example data
df
    Date        station_id  Hour    Temp
0   2004-01-01  1           1       10.0
1   2004-01-01  1           2       20.0
2   2004-01-01  1           3       30.0
3   2004-01-01  1           4       40.0
4   2004-01-01  2           1       50.0
5   2004-01-01  2           2       60.0
6   2004-01-01  2           3       70.0
7   2004-01-01  2           4       80.0
8   2004-01-01  3           1       90.0
9   2004-01-01  3           2       100.0
10   2004-01-02  3          1       110.0
11   2004-01-02  3          2       120.0
12   2004-01-01  4          4       130.0
13   2004-01-02  4          5       140.0

# Create pivot table, with ['Date', 'Hour'] in a MultiIndex
res = df.pivot_table(columns='station_id', index=['Date', 'Hour'], values='Temp')

# Add 'Stn' prefix to each column name
res = res.add_prefix('Stn')

# Delete the name of the columns' index, which is 'station_id'
del res.columns.name

# Reset MultiIndex into columns
res.reset_index(inplace=True)

res
        Date  Hour  Stn1  Stn2   Stn3   Stn4
0 2004-01-01     1  10.0  50.0   90.0    NaN
1 2004-01-01     2  20.0  60.0  100.0    NaN
2 2004-01-01     3  30.0  70.0    NaN    NaN
3 2004-01-01     4  40.0  80.0    NaN  130.0
4 2004-01-02     1   NaN   NaN  110.0    NaN
5 2004-01-02     2   NaN   NaN  120.0    NaN
6 2004-01-02     5   NaN   NaN    NaN  140.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...