#python #pandas
#питон #панды
Вопрос:
Как я могу использовать эту операцию агрегирования groupby plus таким образом, чтобы она могла гибко обрабатывать один или несколько столбцов groupby?
# some data df = pd.DataFrame({'col1': [1, 5, 1, 2, 2, 2], 'col2': [2, 2, 2, 3, 3, 3], 'col3': [999, 999, 999, 999, 999, 999], 'time': ['2020-01-25 12:24:33', '2020-01-25 14:24:33', '2020-01-25 18:24:33', '2020-01-25 09:24:33', '2020-01-25 10:24:33', '2020-01-25 11:24:33']}) # convert time df['time'] = pd.to_datetime(df['time']) # groupby with one col, works df.groupby(['col1', df['time'].dt.floor('d')]).tail(1) # how to use this structure while being flexibly able to group by one or more cols? two_cols = ['col1', 'col2'] df.groupby([two_cols, df['time'].dt.floor('d')]).tail(1)
Ожидаемый результат одинаков для обеих операций:
col1 col2 col3 time 5 2 999 2020-01-25 14:24:33 1 2 999 2020-01-25 18:24:33 2 3 999 2020-01-25 11:24:33
Комментарии:
1. пожалуйста, добавьте свой ожидаемый выходной фрейм данных, объяснив при этом, чего вы хотите достичь
Ответ №1:
Панды ищут список меток для groupby()
функции, и поэтому нам нужно убедиться, что мы даем им список. Я верю, что это работает.
df.groupby(two_cols [df['time'].dt.floor('d')]).tail(1)
Вы можете видеть, что наш параметр в groupby()
-это наш список two_cols
другой список (в []
), который содержит только df['time']...
серию. Таким образом, мы объединяем два списка в новый объект listobject, и это то, что groupby()
будет работать дальше.