Python Pandas:如何将DataFrame Groupby的结果放在带有新列名称的数据框架中



我有一个带有两个列'ID'和" TIME"的数据框架。需要计算ID的平均时间,并使用新的列名称将结果放入新的数据框架中。输入数据框架:

        id  time
0    1     1
1    1     1
2    1     1
3    1     1
4    1     2
5    1     2
6    2     1
7    2     1
8    2     2
9    2     2
10   2     2
11   2     2

我的代码:

import pandas as pd
my_dict = {
    'id':  [1,1,1, 1,1,1, 2,2,2, 2,2,2],
    'time':[1,1,1, 1,2,2, 1,1,2, 2,2,2]
    }
df = pd.DataFrame(my_dict)
x = df.groupby(['id'])['time'].mean()
# x is a pandas.core.series.Series                                                                  
type(x)
y = x.to_frame()
# y is pandas.core.frame.DataFrame                                                                  
type(y)
list(y)

运行此代码会导致:

In [14]: y                                                                                              
Out[14]:                                                                                                
        time                                                                                            
id                                                                                                      
1   1.333333                                                                                            
2   1.666667                                                                                            

groupby返回pandas系列" x",然后将其转换为数据框" y"。如何将输出'y'数据框列名称从"时间"更改为其他内容,例如"平均"?理想情况下,我需要具有两列的输出数据框架:" ID"one_answers" MANE"。这个怎么做?

update2:

y = x.to_frame('sean')。reset_index()

解决了问题!

您可以使用agg传递名称。关键是列的名称,值是聚合函数的别名。as_index=False用于id列作为列留下:

df.groupby(['id'], as_index=False)['time'].agg({'mean': 'mean'})
Out: 
   id      mean
0   1  1.333333
1   2  1.666667

使用您的系列x,这也可以工作:

x.to_frame('mean').reset_index()
Out: 
   id      mean
0   1  1.333333
1   2  1.666667

最新更新