输入:df_Grp,类型是pandas.core.groupby.generic.DataFrameGroupBy
我们先来学习一下如何将分组后的其中一个分组给转换成DataFrame类型:
tmp = dict(list(df_Grp))
tmpname=[]
tmpname = [i for i,j in df_Grp]
#下面这行代码其实就转化成DataFrame了,但是只是一个数据的转过去了,如果要实现所有的都转过去,还是需要完成DataFrame的添加行操作,并且要reset_index
ans_df = pd.DataFrame(tmp[tmpname[0]])#或者ans_df = df_Grp.get_group(tmpname[0]) #get_group函数返回一个DataFrame
但是注意此时得到的index不是0~len-1这样的顺序,而是乱序的,也就是groupby之前的顺序,所以需要再调用reset_indnex()函数进行操作。
当然,上面那一步只是做到了将其中的一个name进行操作,而如果想把所有name都变回去,那就需要加一步:DataFrame的行插入。这一点可以使用concat函数完成,注意一定要有 ignore_index=True 这一步!
ans_df = pd.concat(tmp,ignore_index = True)
对于concat函数,注意第一个参数需要是一个list,而不能是其他类型,如果直接传入的是多个DataFrame的名字的时候,注意不要在上面加引号,因为这样就不对了,就变成了字符串操作,不是list的操作了 ,这一点一定要非常注意,因为非常容易在这个地方犯错。比如要df1和df2,那就ans_df = pd.concat( [df1,df2] ,ignore_index = True),而不是ans_df = pd.concat( ['df1','df2'] ,ignore_index = True)
知识点1:
reset_index(inplace=Ture)函数通过重新建立索引,可以得到DataFrame类型。
知识点2:
DataFrameGroupBy是可以用i,j 来获取每一个元素的,i代表的是属性名字,j获取的是基本信息,是一个DataFrame类型
知识点3:
这种写法:tmpname = [i for i,j in df_Grp],可以快速的得到一个list。