链接groupby和应用熊猫

马梅内

我正在寻找一种链接groupby和应用的方法,如下所示(有关具体示例,请参见下面的CF代码):

df.groupby("a").apply(func_1).groupby("b").apply(func_2)

我猜这是行不通的,因为groupby需要输入一个数据帧,而上面第二个groupby并不总是这样(可以输入一个意向,例如cf)。一个解决方案可能是让第一个应用程序输出func_1的结果以及原始数据帧,但是我还没有找到如何执行此操作的方法。

我正在寻找一个通用的解决方法,而不仅仅是这个特定示例的解决方法。

示例:假设我要为b中的每个组计算a的路缘下面积,然后为c中的每个组计算这些面积之和。

df=pd.DataFrame({"a":np.arange(8),"b":np.repeat(np.arange(4),2),
"c":np.repeat(np.arange(2),4)})

df
   a  b  c
0  0  0  0
1  1  0  0
2  2  1  0
3  3  1  0
4  4  2  1
5  5  2  1
6  6  3  1
7  7  3  1


df.groupby("b").apply(lambda x: trapz(x["a"])).groupby("c").apply(sum)   
Traceback (most recent call last):
[...]
KeyError: 'c'


#Expected output
c
0     3.0
1    11.0


#I know that this code works, but I would like to avoid to modify 
#my dataframe :

df["result"]=list(df
    .groupby("b").apply(lambda x: trapz(x["a"]))
    .repeat(df.groupby("b").size()))
df.groupby("b").first().groupby("c").result.sum()

任何帮助,不胜感激!

YOLO

我想我会做类似的事情:

# your_fun is the function you want to apply
df.groupby('c').apply(lambda f: sum(f.groupby('b')['a'].apply(your_fun))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章