Pandas Изменение формата даты в многоиндексной сводной таблице с сортировкой и потерей точности - PullRequest
2 голосов
/ 10 марта 2020

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

                                                 data
    time                       market
    2020-03-02 00:00:00        Commercial        78.0
                               Residential       79.0
    2020-03-02 04:45:15        Commerical        73.0
                               Residential       79.0
    2020-03-02 06:45:29        Commerical        79.0
                               Residential       71.0

Я хочу сделать, если пользователь выберет другой формат времени, например,% Y-% m-% d, чтобы применить его к первому столбцу. Однако, если это происходит, в этом столбце есть дубликаты (например, будут иметь значения 3 2020-03-02), которые Multiindex.set_levels не принимает. Поэтому мне нужно как-то сгруппировать их и суммировать значения, сохраняя при этом сортировку по времени.

Идеальный вывод

                                        data
    time              market
    2020-03-02        Commercial        230.0
                      Residential       229.0

Мой код

elem = df.index.get_level_values(0).sort_values().strftime("%Y-%m-%d")
df.index.set_levels(elem, level=0, inplace=True, verify_integrity=False)
df.groupby(['time', 'market']).sum()

Этот код приводит к дублированию в столбце времени как ну как колонка рынка что странно. Похоже, что это почти конкатенация значений в столбце market

Также я действительно не хочу изменять структуру путем ее выравнивания или чего-либо подобного, чтобы не ограничивать пользователя.

1 Ответ

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

IIU C, вы можете группировать по time по дням и market. Также необходимо убедиться, что time имеет тип datetime:

(df.groupby([df.index.get_level_values('time')
               .normalize(), 'market'])
   .sum()
)

Выход:

                         data
time       market            
2020-03-02 Commercial   230.0
           Residential  229.0
...