Непонятно, что вы пытаетесь сделать, но .groupby()
возвращает объект (а не фрейм данных). Этот объект содержит список кортежей, каждый из которых содержит (tuple_of_group_labels, list_of_group_indexes)
, поэтому с используемой вами строкой первый элемент каждого кортежа сам будет кортежем, содержащим все уникальные комбинации T
и Text
, а второй элемент будет список, содержащий индексы для строк, которые принадлежат каждой группе.
Например, последний элемент в вашем groupby object
будет кортежем, содержащим кортеж и список ((15:07:00, 'seafood'), [27, ])
Куда go отсюда?
Все зависит от того, что вы хотите делать с каждой группой. Возможные варианты:
.aggregate()
: сумма, среднее, размер / количество, макс., Мин. И многие другие .apply()
: более сложные, но вы можете применять виртуально любая функция, которая еще не векторизована и может принимать фрейм данных / серию в качестве входных данных и возвращать либо фрейм данных / серию той же формы, либо агрегированный скаляр .transform()
: похож на агрегат, но он будет транслировать возвращаемое значение в той же форме, что и self (например, если у вас есть столбец со значением и вы хотите добавить столбец со средним значением для каждой группы)
Подробнее см. руководство пользователя
Я предполагаю, что вам нужно
Попробуйте
df3 = df2.groupby(['T', 'Text']).size()