Группировка кадра данных и переупорядочение на основе даты и количества

1

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

Dataframe после функции groupby

Я использовал следующий код для добавления столбца count:

df5 = df4.groupby(['Invoice Cycle', 'Clinic']).size().reset_index(name='counts')

а затем этот код, чтобы установить индекс и получить dataframe, как видно на изображении выше:

df5 = df5.set_index(['Invoice Cycle','Clinic'])

Теперь я хочу изменить порядок столбца Цикл счета-фактуры, чтобы даты были в порядке с 16-Dec, 17-Jan, 17-Feb, 17-Mar и т.д.

Затем я хочу переупорядочить клиники в каждом цикле счетов, поэтому клиника с самым высоким счетом находится на вершине, а клиника с самым низким счетом находится внизу.

Учитывая значения в Цикле счета-фактуры - это строки, а не временные метки, я не могу выполнять обе указанные выше задачи.

Есть ли способ изменить порядок данных?

Теги:
dataframe
pandas-groupby

1 ответ

0
Лучший ответ

Вы можете создать функцию для преобразования строки даты в формат даты и времени:

import pandas as pd
import datetime 

def str_to_date(string):
    # This will get you the date with the first day of the month (ex. 01-Jan-2017)
    date = datetime.datetime.strptime(string, '%y-%b')
    return date

df['Invoice Cycle'] = df['Invoice Cycle'].apply(str_to_date)
# now you an sort correctly
df = df.sort_values(['Invoice Cycle', 'counts'])
  • 0
    Спасибо! Проблема в том, что 17 августа означает август 2017 года, но приведенный выше код дает мне 17 в качестве даты. Я попробую изменить формат даты, прежде чем опробовать вашу функцию.
  • 0
    Я отредактировал ответ выше. Теперь код преобразуется 17 декабря в 01-12-2017.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню