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

#pandas #sum #grouping #dtype

#pandas #сумма #группировка #dtype

Вопрос:

Думал, что это будет несколько просто, но опять же — не тот случай — для меня.

Я создал groupby и сохранил как фрейм данных. Теперь я хочу выполнить groupby для этого фрейма данных, но у меня возникают ошибки каждый раз, когда я пытаюсь выполнить подсчет столбцов, которые были суммированы в предыдущем groupby. Ниже приведен фрейм данных из первого groupby:

     <class 'pandas.core.frame.DataFrame'>
employee                           int64
Date1                     datetime64[ns]
Duration           sum           float64
RoundedInMinutes   sum             int64
RoundedOutMinutes  sum             int64
  

Я могу выполнить group by для сотрудника и даже лямбда-функцию, используя Date1. Однако я не могу выполнить лямбда-функцию для длительности. Существует ключевая ошибка в продолжительности. Любой из столбцов с суммой в dtype создает ошибку.

Код для создания первого groupby:

 groupedByEmployeeShift = df.groupby(['employee', 'Date1']).agg({'Duration': ['sum'], 'RoundedInMinutes': ['sum'], 'RoundedOutMinutes': ['sum']}).reset_index()
  

Результат:

   employee      Date1 Duration RoundedInMinutes RoundedOutMinutes
                           sum              sum               sum
0   102209 2015-06-27     5.87                0                 0
1   102209 2015-07-23     8.17                0                 0
2   102209 2015-08-15     8.00                0                 0
3   102209 2016-01-30     8.23                2                 0
4   102209 2016-08-13     8.25                4                 0
5   102209 2017-01-28     8.00                1                 0
6   102209 2017-08-19     8.02                5                 0
7   102209 2018-02-10     8.00                2                 0
8   102209 2018-08-18     8.10                0                 0
9   102209 2019-02-09     7.93                1                 0
  

Код для запуска с этим фреймом данных groupby:

 shiftStats=groupedByEmployeeShift.groupby('employee')['Duration'].apply(lambda x: (x> 0).sum()).reset_index(name='OT_Shifts')
  

Я знаю, что это что-то простое, но я просто не могу понять это.

Мы очень ценим вашу помощь.

Комментарии:

1. Можете ли вы удалить мультииндекс и попробовать groupby после. groupedByEmployeeShift.columns = groupedByEmployeeShift.columns.droplevel(0)

2. Почему бы и нет groupedByEmployeeShift.loc[ groupedByEmployeeShift['Duration'].gt(0) ].groupby('employee')['Duration'].sum() ?

3. Вы действительно должны опубликовать ожидаемый результат, я предположил, что вам нужна та сумма, которую я прокомментировал, но ваш вопрос неясен

Ответ №1:

Боже. Неочевидно, но легко исправить. «Сумма» находится во второй строке заголовка фрейма данных. Просто использовал приведенный ниже код, чтобы удалить его, и теперь все работает.

 groupedByEmployeeShift.columns = groupedByEmployeeShift.columns.droplevel(-1)