Применяйте разные агрегации к группам pandas GroupBy

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных, подобный

      A     B    C   D
one  2  10.0    0  11
two  5   NaN  NaN   8
  

и сделал groupby с

 df.groupby(np.array(['min', 'max', 'min', 'max']), axis=1)
  

Теперь я хочу объединить группы с разными функциями. Группа ‘min’ должна быть объединена с .sum(axis=1) , в то время как группа ‘max’ должна быть объединена с .sum(axis=1, skipna=False) .
Желаемый результат будет

      min  max
one    2   21
two    5  NaN
  

Есть ли какой-либо встроенный способ сделать это?

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

1. df.groupby(['min', 'max', 'min', 'max'], axis=1) Правильно?

2. Это работает для меня, но я поясню это.

Ответ №1:

Я считаю, что вам нужна пользовательская функция, потому что это не built-in :

 def f(x):
    if x.name == 'min':
        return x.sum(axis=1)
    elif x.name == 'max':
        return x.sum(axis=1, skipna=False)

df = df.groupby(['min', 'max', 'min', 'max'], axis=1).apply(f)
print (df)
      max  min
one  21.0  2.0
two   NaN  5.0