我有一个带有两个列'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