Python Pandas将GroupBy对象转换为DataFrame

Ray*_*Ray 10 python pandas

有两个问题看似相似,但它们不是同一个问题:这里这里.它们都调用了一种方法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)
Run Code Online (Sandbox Code Playgroud)

上面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
Run Code Online (Sandbox Code Playgroud)

我想要做的是按"name"和"take"(DataFrame按此顺序)列进行分组,这样我就可以通过从"name"和"take"列构造的multiindex 进行索引,如下所示.

               score  ping
 name take        
sasha  one  0.923263    72
       two  0.724720    14
  asa  one  0.774320    76
       two  0.128721    71
Run Code Online (Sandbox Code Playgroud)

我如何实现这一目标?如果我这样做grouped = data.groupby(["name", "take"]),那么grouped就是一个pandas.core.groupby.DataFrameGroupBy实例.如何转换GroupBycount()实例?

jez*_*ael 12

你需要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
Run Code Online (Sandbox Code Playgroud)

  • 这不符合实际问题:如何将DataFrameGroupBy转换为DataFrame. (5认同)