Python的大熊猫转换的GroupBy对象到数据帧
问题描述:
问题
有一些类似于两个问题,但它们不是同一个问题:here和here。他们都称GroupBy
的方法,如count()
或aggregate()
,我知道这返回DataFrame
。我问的是如何将GroupBy
(pandas.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
哇,!!!! Riiiiiight !!!!!好的,当Stack Overflow允许我在9分钟内接受这个答案。谢谢。 – Ray
当我尝试使用这个答案时,我得到一个'AttributeError'。 “无法访问'DataFrameGroupBy'对象的可调用属性'set_index',尝试使用'apply'方法” – Nate
@Nate - 看起来'data'不是'DataFrame',而是groupby的输出 - 所以需要'g = df.groupby ('col')'然后'g.apply(lambda x:x ['col1']。set_index())' – jezrael