我想将函数应用于DataFrame
的每一列,但按组(MWE如下)执行。有没有比我更优雅的方式做到这一点?
import numpy as np
import pandas as pd
df1 = pd.DataFrame(data = {"a": [1,2,3,4,5], "b": [6,7,8,9,10]}, index = pd.Index([0,0,0,1,1], name="someindex"))
df1.groupby("someindex").apply(lambda g: g.apply(lambda x: np.average(x)))
这只是一个玩具示例,但我的普遍性是一个函数可以返回与组相同的形状,但使用计算中的所有元素(例如,标准化列)。
答案 0 :(得分:1)
您可以groupby.mean
:
df1.groupby("someindex").mean()
按组计算所有数字列的平均值。
或者对于一般功能,如果它本质上是聚合,groupby.agg
可以为您节省一些lambda
:
df1.groupby("someindex").agg(np.average)
根据功能的一般情况,我猜有些情况下你无法简化解决方案
答案 1 :(得分:0)
这是更简洁的做事方式(我的标准化列的例子)。我发布了apply
方式,然后是transform
方式(这是更简洁的方式)。
#verbose
df1.groupby("someindex").apply(lambda x: x.apply(lambda y: (y - y.mean())/y.std()))
#clear
df1.groupby("someindex").transform(lambda x: (x - x.mean())/x.std())