При использовании df.mean() Я получаю результат, в котором задается среднее значение для каждого столбца. Теперь предположим, что я хочу среднее значение первого столбца и сумму второго. Есть ли способ сделать это? Я не хочу разбирать и собирать данные.Pandas: применять различные функции к разным столбцам
Моя первоначальная идея состояла в том, чтобы сделать что-то вдоль линий pandas.groupby.agg() как так:
df = pd.DataFrame(np.random.random((10,2)), columns=['A','B'])
df.apply({'A':np.mean, 'B':np.sum}, axis=0)
Traceback (most recent call last):
File "<ipython-input-81-265d3e797682>", line 1, in <module>
df.apply({'A':np.mean, 'B':np.sum}, axis=0)
File "C:\Users\Patrick\Anaconda\lib\site-packages\pandas\core\frame.py", line 3471, in apply
return self._apply_standard(f, axis, reduce=reduce)
File "C:\Users\Patrick\Anaconda\lib\site-packages\pandas\core\frame.py", line 3560, in _apply_standard
results[i] = func(v)
TypeError: ("'dict' object is not callable", u'occurred at index A')
Но ясно, что это не работает. Похоже, что передача dict будет интуитивным способом сделать это, но есть ли другой способ (опять же без разборки и повторной сборки DataFrame)?
Это на самом деле довольно приятно. Мое обходное решение заключалось в том, чтобы вставить столбец единиц в блок данных, выполнив группу по этому столбцу, а затем передав dict в агрегированный метод. – pbreach
Спасибо! Я замечаю, что это не удается, если в DataFrame больше столбцов, чем ключей в функции dict. @ bill-letson вы тоже это видели? –
Полная реализация должна включать предложение KeyError, которое возвращает функцию идентификации: lambda x: x –