Панды длинные в широкую форму - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть длинный фрейм данных с индексом временных рядов, таких как:

datetime             number
2015-07-06 00:00:00  12
2015-07-06 00:10:00  55
2015-07-06 00:20:00  129
2015-07-06 00:30:00  5
2015-07-06 00:40:00  3017
2015-07-06 00:50:00  150
2015-07-06 01:00:00  347
2015-07-06 01:10:00  8
2015-07-06 01:20:00  19
...                  ...

Я хотел бы преобразовать / изменить эту форму, разделив столбец каждые n строк в строку в «новой» таблице.

Например, n = 3 create:

datetime             #0    #1    #2
2015-07-06 00:00:00  12    55    129
2015-07-06 00:30:00  5     3017  150
2015-07-06 01:00:00  347   8     19
...                  ...   ...   ...

Я могу подумать об этом с помощью цикла For-Loop, но мне было интересно, есть ли более эффективный способ, родной дляПанды.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Вот одно из решений

n = 3
new_df = df.groupby(df.index//n).agg({'datetime': 'first', 'number': lambda x: x.tolist()})
new_df.assign(**(new_df.number.apply(pd.Series).add_prefix('#')))


    datetime            number          #0  #1      #2
0   2015-07-06 00:00:00 [12, 55, 129]   12  55      129
1   2015-07-06 00:30:00 [5, 3017, 150]  5   3017    150
2   2015-07-06 01:00:00 [347, 8, 19]    347 8        19

Вы можете удалить числовой столбец

Редактировать: Как подсказывает @coldspeed, вы можете объединить два последних шага.

new_df = df.groupby(df.index//n).agg({'datetime': 'first', 'number': lambda x: x.tolist()})
new_df.assign(**(new_df.pop('number').apply(pd.Series).add_prefix('#')))

    datetime            #0  #1      #2
0   2015-07-06 00:00:00 12  55      129
1   2015-07-06 00:30:00 5   3017    150
2   2015-07-06 01:00:00 347 8       19
0 голосов
/ 04 февраля 2019

Вы можете использовать groupby и apply / agg с list:

u = df.groupby(pd.Grouper(key='datetime', freq='30min'))['number'].agg(list)
pd.DataFrame(u.tolist(), index=u.index)

                       0     1    2
datetime                           
2015-07-06 00:00:00   12    55  129
2015-07-06 00:30:00    5  3017  150
2015-07-06 01:00:00  347     8   19
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...