【发布时间】:2020-12-07 03:21:15
【问题描述】:
如何将函数应用于需要来自 groupby 数据帧多列的参数并返回两个缩放器值的 pandas groupby。
以下是可重复的示例。最后一行获取 f_value
import pandas as pd
import numpy as np
from statsmodels.formula.api import ols
import plotly.express as px
n=100
df = pd.DataFrame({
'c': np.random.choice(['CATS', 'DOGS'], n),
'x': np.random.choice(list('ABCDE'), n),
'y': np.random.normal(5, 1, n)
})
signal = np.where(df['c'].eq('CATS') & df['x'].eq('A'), 1.1, 0)
df['y'] = df['y'] + signal
def get_ols_fp(df, x, y):
formula = y + '~' + x
model = ols(formula, df).fit()
f_value = model.fvalue
p_value = model.f_pvalue
return (f_value, p_value)
# getting f_value and p_value works with a single series.
get_ols_fp(df[df['c'].eq('CATS')], 'x', 'y')
上面的代码工作并获取 f_value 和 p_value。但是,以下方法不起作用。
# how could we run the get_ols with a groupby().agg()
df.groupby('c').agg(get_ols_fp('x', 'y'))
在这种情况下,所需的输出将是“c”变量(“CATTS”和“DOGS”)的每级一行一行的数据帧,一列用于 p_value,另一列用于 f_value。
【问题讨论】:
标签: pandas pandas-groupby aggregate apply