Панды питона: несколько агрегаций одного столбца



учитывая следующий (полностью избыточный) пример фрейма данных



df = pandas.DataFrame({
"date":[datetime.date(2012,x,1) for x in range(1,11)],
"returns":0.05*np.random.randn(10),
"dummy":np.repeat(1,10)
})


существует ли встроенный способ применить две разные агрегирующие функции к одному столбцу, не вызывая agg несколько раз?



синтаксически неправильно, но интуитивно правильно, способ сделать это будет:



# Assume `function1` and `function2` are defined for aggregating.
df.groupby("dummy").agg({"returns":function1, "returns":function2})


очевидно, что Python не позволяет дублировать ключи. Есть ли другой способ для выражения ввода в agg? Возможно, список кортежей [(column, function)] будет работать лучше, чтобы разрешить несколько функций, применяемых к одному столбцу? Но похоже, что он принимает только словарь.



есть ли обходной путь для этого, кроме определения вспомогательной функции, которая просто применяет обе функции внутри нее? (Как это будет работать с агрегацией в любом случае?)

580   2  

2 ответов:

Вы можете просто передать функции в качестве списка:

In [20]: df.groupby("dummy").agg({"returns": [np.mean, np.sum]})
Out[20]: 
        returns          
            sum      mean

dummy                    
1      0.285833  0.028583

или как словарь:

In [21]: df.groupby('dummy').agg({'returns':
                                  {'Mean': np.mean, 'Sum': np.sum}})
Out[21]: 
        returns          
            Sum      Mean
dummy                    
1      0.285833  0.028583

будет что-то вроде этой работы:

In [7]: df.groupby('dummy').returns.agg({'func1' : lambda x: x.sum(), 'func2' : lambda x: x.prod()})
Out[7]: 
              func2     func1
dummy                        
1     -4.263768e-16 -0.188565

Comments

    Ничего не найдено.