使用pandas进行Groupby并获取连接行

时间:2018-05-03 08:08:04

标签: python pandas group-by

我正在与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

1 个答案:

答案 0 :(得分:0)

value_1列的最大值使用DataFrameGroupBy.idxmax作为索引,因此首先按set_indexproject_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