我的数据框有两列'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()
解决问题!
答案 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