define aggfunc для каждого столбца значений в сводной таблице pandas

Пытался создать сводную таблицу с несколькими столбцами «значения». Я знаю, что могу использовать aggfunc для агрегирования значений так, как я хочу, но что, если я не хочу суммировать или объявлять оба столбца, но вместо этого я хочу, чтобы сумма одного столбца была равна среднему значению другого. Так можно ли это сделать с помощью панд?

df = pd.DataFrame({ 'A' : ['one', 'one', 'two', 'three'] * 6, 'B' : ['A', 'B', 'C'] * 8, 'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 4, 'D' : np.random.randn(24), 'E' : np.random.randn(24) }) 

Теперь это получит сводную таблицу с суммой:

 pd.pivot_table(df, values=['D','E'], rows=['B'], aggfunc=np.sum) 

И это для среднего:

 pd.pivot_table(df, values=['D','E'], rows=['B'], aggfunc=np.mean) 

Как я могу получить сумму для D и значение для E ?

Надеюсь, мой вопрос достаточно ясен.

2 Solutions collect form web for “define aggfunc для каждого столбца значений в сводной таблице pandas”

Вы можете выполнить два DataFrames :

 >>> df1 = pd.pivot_table(df, values=['D'], rows=['B'], aggfunc=np.sum) >>> df2 = pd.pivot_table(df, values=['E'], rows=['B'], aggfunc=np.mean) >>> pd.concat((df1, df2), axis=1) DE BA 1.810847 -0.524178 B 2.762190 -0.443031 C 0.867519 0.078460 

или вы можете передать список функций как параметр aggfunc а затем переиндексировать:

 >>> df3 = pd.pivot_table(df, values=['D','E'], rows=['B'], aggfunc=[np.sum, np.mean]) >>> df3 sum mean DEDE BA 1.810847 -4.193425 0.226356 -0.524178 B 2.762190 -3.544245 0.345274 -0.443031 C 0.867519 0.627677 0.108440 0.078460 >>> df3 = df3.ix[:, [('sum', 'D'), ('mean','E')]] >>> df3.columns = ['D', 'E'] >>> df3 DE BA 1.810847 -0.524178 B 2.762190 -0.443031 C 0.867519 0.078460 

Alghouth, было бы неплохо иметь возможность определить aggfunc для каждого столбца отдельно. Не знаю, как это можно было бы сделать, может быть aggfunc в aggfunc dict-like aggfunc , например {'D':np.mean, 'E':np.sum} .

обновление На самом деле, в вашем случае вы можете поворачивать вручную :

 >>> df.groupby('B').aggregate({'D':np.sum, 'E':np.mean}) ED BA -0.524178 1.810847 B -0.443031 2.762190 C 0.078460 0.867519 

Вы можете применить определенную функцию к определенному столбцу, передав в dict.

 pd.pivot_table(df, values=['D','E'], rows=['B'], aggfunc={'D':np.sum, 'E':np.mean}) 
  • Как скопировать строки из нескольких файлов базы на условиях в python?
  • pathname слишком долго, чтобы открыть?
  • Почему мое сито Eratosthenes работает быстрее с целыми числами, чем с булевыми?
  • Элегантный способ выполнения арифметики кортежа
  • Генератор первичного номера вылетает из памяти, если в массиве слишком много чисел
  • Как правильно разобрать utf-8 xml с ElementTree?
  • pip терпит неудачу с AttributeError: объект 'module' не имеет атрибутов 'wraps'
  • загрузка ошибки с помощью nltk.download ()
  • Поиск списка с использованием ключевых слов из другого списка?
  • Обработка Python socket.error: Сброс соединения с помощью одноранговой сети
  • Python 3.4 вызывает UnicodeEncodeError на сервере Apache2 (Mac), но отлично работает в командной строке
  • Python - лучший язык программирования в мире.