Панды питона: несколько агрегаций одного столбца
учитывая следующий (полностью избыточный) пример фрейма данных
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)] будет работать лучше, чтобы разрешить несколько функций, применяемых к одному столбцу? Но похоже, что он принимает только словарь.
есть ли обходной путь для этого, кроме определения вспомогательной функции, которая просто применяет обе функции внутри нее? (Как это будет работать с агрегацией в любом случае?)
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