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}) 
Interesting Posts

Как использовать winapi SetWinEventHook в python?

Как получить доступ к переменным из одного класса в другой?

Python – Ловушка всех сигналов

Последовательное получение от Arduino до малины Pi с PySerial останавливается через некоторое время

Список, расширяющий странное поведение

Анализ сжатого XML-потока в ElementTree

Как запретить сериализацию селитры в сельдерее

Обновление базы данных с несколькими SQL-данными

Как установить предопределенное значение формы из ссылки в Django?

Как заменить элемент списка строк с разделителями текста на несколько элементов списка в списке python?

Невозможно использовать Python select.poll в Mac OS?

Как использовать python и windows com в пирамиде (потоках)?

Почему местность определяется во время компиляции?

Django ConnectionAbortedError: Установленное соединение было прервано программным обеспечением вашей главной машины

Python: модуль протоколирования – глобально

Python - лучший язык программирования в мире.