问题
有两个看起来相似但实际上不是同一个问题的问题:这里和这里。它们都调用了GroupBy
的方法,例如count()
或aggregate()
,我知道这些方法返回一个DataFrame
。我的问题是如何将GroupBy
(类pandas.core.groupby.DataFrameGroupBy
)对象本身转换为DataFrame
。下面我会举例说明。
示例
构造一个如下的示例DataFrame
。
data_list = []
for name in ["sasha", "asa"]:
for take in ["one", "two"]:
row = {"name": name, "take": take, "score": numpy.random.rand(), "ping": numpy.random.randint(10, 100)}
data_list.append(row)
data = pandas.DataFrame(data_list)
上述的DataFrame
应该看起来像下面这样(显然具有不同的数字)。
name ping score take
0 sasha 72 0.923263 one
1 sasha 14 0.724720 two
2 asa 76 0.774320 one
3 asa 71 0.128721 two
我想要做的是按照“name”和“take”这两列进行分组(按照这个顺序),以便可以获得一个由“name”和“take”这两列构成的多级索引的DataFrame
,如下所示。
score ping
name take
sasha one 0.923263 72
two 0.724720 14
asa one 0.774320 76
two 0.128721 71
我该如何做到这一点?如果我执行 grouped = data.groupby(["name", "take"])
,那么 grouped
就是一个 pandas.core.groupby.DataFrameGroupBy
实例。正确的做法是什么?
AttributeError
错误。"无法访问 'DataFrameGroupBy' 对象的可调用属性 'set_index',请尝试使用 'apply' 方法"。 - Natedata
不是DataFrame
,而是groupby
的输出 - 因此需要g = df.groupby('col')
,然后g.apply(lambda x: x['col1'].set_index())
。 - jezrael