我正在与pandas
合作,我发现自己遇到了问题。我使用groupby
方法对列进行分组,并找到最大值和平均值。我的问题是我希望按time_stamp
列进行分组,并在值列中获取最大值(values_1
)和平均值(values_2
),但我想知道哪个{{1也是最大的。我附上了我的输入表和所需的表。提前感谢您的帮助!
我的输入表:
project_id
我想要的输出:
id time_stamp project_id value_1 value_2
- ---------------------------------------------------
0 2018-05-02 04:00:25 41 3 3
1 2018-05-02 04:00:25 42 4 3
2 2018-05-02 04:00:25 76 6 1
3 2018-05-02 04:00:25 39 8 7
4 2018-05-02 04:00:25 10 1 2
5 2018-05-02 04:10:25 33 3 7
6 2018-05-02 04:10:25 15 6 8
7 2018-05-02 04:10:25 34 6 9
8 2018-05-02 04:10:25 22 9 4
9 2018-05-02 04:10:25 58 6 1
我的尝试:
id time_stamp max_id value_1 value_2
- ---------------------------------------------------
3 2018-05-02 04:00:25 39 8 7
8 2018-05-02 04:10:25 22 9 4
答案 0 :(得分:0)
按value_1
列的最大值使用DataFrameGroupBy.idxmax
作为索引,因此首先按set_index
按project_id
列创建索引:
df = (pd_table.set_index('project_id')
.groupby('time_stamp')
.agg({'value_1':['max', 'idxmax'],'value_2':'mean'}))
print (df)
value_1 value_2
max idxmax mean
time_stamp
2018-05-02 04:00:25 8 39 3.2
2018-05-02 04:10:25 9 22 5.8
在列中获取MultiIndex
,因此需要进行一些清理:
#flattening MultiIndex
df.columns = df.columns.map('_'.join)
d = {'value_1_idxmax':'max_id','value_1_max':'value_1','value_2_mean':'value_2'}
#rename and change order of columns
df = df.rename(columns=d).reindex(columns=['max_id','value_1','value_2']).reset_index()
print (df)
time_stamp max_id value_1 value_2
0 2018-05-02 04:00:25 39 8 3.2
1 2018-05-02 04:10:25 22 9 5.8