#python
#python
Вопрос:
Я попытался минимизировать стандартное отклонение столбца «V» для каждой группы. Итак, я использую scipy, код:
Это может привести к созданию нового массива «V», затем я попытался применить этот метод для каждой группы, используя:
tt=df.groupby(by=["A","B"])
tt.minimize(equation,options={'xtol':0.001}).x
Однако, получите сообщение об ошибке
Объект ‘DataFrameGroupBy’ не имеет атрибута ‘minimize’
Может кто-нибудь дать мне несколько советов о том, как применить оптимизацию для каждой группы? Спасибо.
Комментарии:
1. у groupby нет функции минимизации, вы имеете в виду сжатие?
2. Я надеюсь минимизировать std для столбца «V» по группам. Я не знаю, какой модуль можно было бы использовать для решения этой проблемы. И мой метод работает только для всего фрейма данных. Я буду искать squeeze. Спасибо!
Ответ №1:
Используйте apply
метод для запуска произвольных функций Python в каждой группе. minimize
это функция в SciPy (не Pandas), и в вашем случае решение будет выглядеть примерно так:
df.groupby(by=["A","B"])
.apply(lambda g: minimize(equation, g.V, options={'xtol':0.001}).x)
Полный рабочий пример:
>>> import pandas as pd
>>> from scipy.optimize import minimize, rosen
>>> df = pd.DataFrame({'A': list("abab"), 'B': list("cdcd"), 'V': [1, 2, 3, 4]})
>>> df.groupby(by=["A","B"]).apply(lambda g: minimize(rosen, g.V, options={'xtol':0.001}).x)
A B
a c [0.9999955536845236, 0.9999911035369479]
b d [0.9999980290689747, 0.9999959871180912]
dtype: object
Комментарии:
1. Большое вам спасибо! это работает отлично. Что касается g.V, означает ли это V столбец в каждой группе? и лямбда g: выполняется ли итерация по группам? Правильно ли я понимаю?
2.
lambda
это синтаксис Python для быстрого создания функций.apply
метод принимает любую функцию, первым аргументом которой является фрейм данных, и вызывает эту функцию и возвращает результат для каждой группы. Да,g
это group / dataframe, и g.V ссылается на его столбец.3. Имеет смысл. Спасибо за ваш любезный ответ!