我有一个关于将 pandas 数据帧与用户定义的函数聚合的问题。如果我有一个数据帧并在有或没有 groupby 的情况下运行 agg,则在使用内置函数时会聚合结果。另一方面,如果我使用自定义函数,则在使用 groupby 时它会按预期工作。当不使用 groupby 时,不会进行聚合。有没有一种方法可以在不使用 groupby 并使用自定义函数的情况下进行聚合?我知道可以只添加一个虚拟变量,但这不是首选的解决方案。测试 1-3 按预期工作,但测试 4 不工作。
df = pd.DataFrame(columns=['a', 'b', 'c'])
n=1000
np.random.seed(0)
df['a'] = np.random.rand(n)
df['a'] = np.random.rand(n)
df['c'] = np.random.randint(1, 4, size=n)
def CoV(_s):
return pd.Series({'CoV' : np.std(_s)/np.mean(_s)})
test1 = df.agg({'a':['std', np.mean]})
print(test1)
test2 = df.groupby(['c']).agg({'a':['std', np.mean]})
print(test2)
test3 = df.groupby(['c']).agg({'a':[CoV]})
print(test3)
# does not work as intended, no aggregation
test4 = df.agg({'a':[CoV]})
print(test4)
Run Code Online (Sandbox Code Playgroud)