pandas Groupby对象apply函数的返回类型

       pandas中,groupby对象有一个很灵活的函数apply,其对每个分组执行相应的操作,具体操作由传入的参数func实现,*args和**kwargs表示传给func的参数,这里func函数的第一个参数必须是以dataframe类型。

GroupBy.apply(func*args**kwargs)

       本文要说明的问题是,groupby的apply函数返回的类型是什么。官方文档中,说其会返回一个dataframe或者一个series,那么在什么情况下返回的是dataframe,什么情况下返回的是series,以及分别是什么样的dataframe和series?

       apply返回的类型取决于func函数返回的类型。这里分为几种情况。

1 func函数返回的是dataframe

       这种情况下,apply返回的一定是一个dataframe,且该dataframe具有多层索引,最外层的索引是groupby时用来分组的key列的内容;内层索引是funch函数返回的dataframe的索引。

2 func函数返回的是series

       这种情况下,还需要进一步区分series。如果每个分组返回的series的索引都一样,那么apply返回的是一个dataframe,其索引是groupby时用来分组的列,columns是func函数返回的series的索引;如果每个分组具有不同的索引,那么返回的是一个series,但是这个series具有多层索引,外层索引是用来分组的列,内层索引是func函数返回的series的索引。

3 func函数返回的是其他对象

       这种情况下,apply返回的是series。

       最后,如果func返回的dataframe具有相同的索引名称,那么apply返回的dataframe的内层索引也具有相同的名称,如果没有相同的名称,那么内层索引便没有名称;如果func返回的series具有相同的索引名称,那么如果apply返回的是dataframe,则该名称会成为dataframe的columns的name,如果apply返回的是具有多层索引的series,那么该名称会成为内层索引的name,如果func返回的series不具有相同的索引name,那么该name会被忽略。

猜你喜欢

转载自blog.csdn.net/S_o_l_o_n/article/details/108491791