Python Pandas:如何将DataFrame groupby的结果放在具有新列名的数据框中?

时间:2016-12-18 10:53:54

标签: python pandas

我的数据框有两列'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'数据框列名从'time'更改为其他内容,例如'mean'?理想情况下,我需要两列输出数据框:'id'和'mean'。这该怎么做?

UPDATE2:

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

解决问题!

1 个答案:

答案 0 :(得分:0)

您可以使用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