Использование numpy.max / numpy.min для значений меток времени - PullRequest
0 голосов
/ 04 июля 2018

У меня есть таблица продаж с custid, столбцом даты транзакции и т. Д. Я использую groupby в столбце custid, а затем использую метод agg, чтобы получить максимальную дату (чтобы получить последнюю дату транзакции данного конкретного клиента) и минимальная дата (чтобы получить первую дату своей транзакции в магазине).

Мой код, как показано ниже:

sales['transdate'] = pd.to_datetime(sales['transdate']) # Converting the transdate column from string to timestamps.
sales['custid'].groupby.transdate({'count': np.count_nonzero ,'first': np.min, 'last' : np.max})

Я хотел бы знать, нормально ли это

Рассчитайте минимальное и максимальное значения между датами, используя методы np.min / max. или я должен использовать другие методы, связанные с датой и временем?

1 Ответ

0 голосов
/ 04 июля 2018

Вы должны использовать groupby.agg для применения нескольких функций агрегирования.

Обратите внимание, что с помощью Pandas многие функции агрегации могут вызываться через строки. В этом случае вы можете использовать 'size', 'min' и 'max'. Использование строк рекомендуется, поскольку Pandas отображает строковое представление в проверенные и эффективные алгоритмы.

Вот демоверсия:

df = pd.DataFrame([['2017-01-14', 1], ['2017-12-05', 2], ['2017-06-15', 2],
                   ['2017-03-21', 1], ['2017-04-25', 2], ['2017-02-12', 1]],
                  columns=['transdate', 'custid'])

df['transdate'] = pd.to_datetime(df['transdate'])

agg_dict = {'count': 'size', 'first': 'min', 'last': 'max'}

res = df.groupby('custid')['transdate'].agg(agg_dict)

print(res)

        count      first       last
custid                             
1           3 2017-01-14 2017-03-21
2           3 2017-04-25 2017-12-05
...