Python的大熊猫转换的GroupBy对象到数据帧

问题描述:

问题

有一些类似于两个问题,但它们不是同一个问题:herehere。他们都称GroupBy的方法,如count()aggregate(),我知道这返回DataFrame。我问的是如何将GroupBypandas.core.groupby.DataFrameGroupBy类)对象本身转换为DataFrame。我会在下面说明。Python的大熊猫转换的GroupBy对象到数据帧

构造一个例子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 

我想要做的是一群以列“名称”和“需要”(按顺序),这样我就可以得到一个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实例。如何将grouped转换为DataFrame实例?

您需要set_index

data = data.set_index(['name','take']) 
print (data) 
      ping  score 
name take     
sasha one  46 0.509177 
     two  77 0.828984 
asa one  51 0.637451 
     two  51 0.658616 
+0

哇,!!!! Riiiiiight !!!!!好的,当Stack Overflow允许我在9分钟内接受这个答案。谢谢。 – Ray

+0

当我尝试使用这个答案时,我得到一个'AttributeError'。 “无法访问'DataFrameGroupBy'对象的可调用属性'set_index',尝试使用'apply'方法” – Nate

+1

@Nate - 看起来'data'不是'DataFrame',而是groupby的输出 - 所以需要'g = df.groupby ('col')'然后'g.apply(lambda x:x ['col1']。set_index())' – jezrael