Python 为什么要将pandas groupby对象重铸为数据框以写入excel?

Python 为什么要将pandas groupby对象重铸为数据框以写入excel?,python,excel,pandas,Python,Excel,Pandas,如果我将csv文件读入pandas数据框,然后使用groupby(pd.groupby([column1,…]),为什么我不能在新的分组对象上调用to_excel属性 import pandas as pd data = pd.read_csv("some file.csv") data2 = data.groupby(['column1', 'column2']) data2.to_excel("some file.xlsx") #spits out an error about series

如果我将csv文件读入pandas数据框,然后使用groupby(pd.groupby([column1,…]),为什么我不能在新的分组对象上调用to_excel属性

import pandas as pd
data = pd.read_csv("some file.csv")
data2 = data.groupby(['column1', 'column2'])
data2.to_excel("some file.xlsx") #spits out an error about series lacking the attribute 'to_excel'
data3 = pd.DataFrame(data=data2)
data3.to_excel("some file.xlsx") #works just perfectly!
有人能解释为什么熊猫需要经历从数据帧到序列的整个转换过程来对行进行分组吗


我想我的问题不清楚。 重新设置框架的问题:当您使用pd.groupby()时,为什么熊猫会将数据帧转换为不同类型的对象(groupby对象)?显然,您可以将此对象强制转换为数据帧,其中分组的列成为(多级)索引。
默认情况下为什么不这样做(用户不必手动将其转换为数据帧)?

要回答您重新定义的问题,即为什么
groupby
会给您一个groupby对象而不是数据帧:这样做是为了提高效率。groupby对象不会复制关于原始数据的所有信息;它本质上将索引存储到原始数据帧中,指示每行所属的组。这允许您将单个groupby对象用于多个聚合组操作,每个聚合组操作可能使用不同的列(例如,您可以执行
g=df.groupby('Blah')
,然后分别执行
g.SomeColumn.sum()
g.OtherColumn.mean()


简而言之,groupby的主要功能是让您对组进行聚合计算。大多数人使用
groupby
,并不是简单地将单个列的值旋转到索引级别。如果你想这样做,你必须自己做。

请显示
data.head()
的输出。因为你只有一个
groupby
对象,没有执行聚合,所以错误显示
系列
对象没有
到excel
方法这是预期的操作,看起来您希望将索引设置为这些列,然后导出到Excel。另外请注意,通常,执行
pd.DataFrame(groupby_object)
将引发错误!这并不意味着有效,事实上这让我感到惊讶(你能给出一些这样做的示例数据吗?)此外,如果你想将某个列设置为多级索引,你根本不需要groupby,只需要一个
data.set.index(['column1','column2'))
调用!我认为data3=pd.DataFrame(data=data2)行可能有错误。我认为它可能与以前的数据定义相互作用。我这样说的原因是,我的groupby对象不能通过调用data=pandas.core.groupby.DataFrameGroupBy对象的DataFrame构造函数进行转换。