按两列分组,最大值为python中的第三列

按两列分组,最大值为python中的第三列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧,它有周期\开始\时间、ID、更多的列和列值。 我需要的是按时段\开始\时间和ID分组(因为按时间和ID有重复的行),并取列值的最大值。 df: 期望输出: PERIOD_START_TIME ID ... VALUE 06.01.2017 02:00:00 55 ... 35 06.01.2017 03:00:00 55 ... 63 06.01.2017 04:00:00 55 ... 63 06.01.2017 02:00:00

我有一个数据帧,它有周期\开始\时间、ID、更多的列和列值。 我需要的是按时段\开始\时间和ID分组(因为按时间和ID有重复的行),并取列值的最大值。 df:

期望输出:

PERIOD_START_TIME     ID  ...  VALUE
06.01.2017 02:00:00   55  ...   35
06.01.2017 03:00:00   55  ...   63
06.01.2017 04:00:00   55  ...   63
06.01.2017 02:00:00   65  ...   10
06.01.2017 03:00:00   65  ...   22
06.01.2017 04:00:00   65  ...   15
使用和聚合:

或:


如需更多列,请按以下方式选择:

备选方案:

cols = ['PERIOD_START_TIME','ID']
df = df.sort_values(cols).groupby(cols, as_index=False).first()
print (df)
     PERIOD_START_TIME  ID  A  VALUE
0  06.01.2017 02:00:00  55  8     35
1  06.01.2017 02:00:00  65  8     10
2  06.01.2017 03:00:00  55  8     63
3  06.01.2017 03:00:00  65  8     22
4  06.01.2017 04:00:00  55  8     63
5  06.01.2017 04:00:00  65  8     12

就这样,谢谢。但是,我怎样才能保留其他栏目,而不仅仅是这三个栏目?
print (df)
      PERIOD_START_TIME  ID  A  VALUE
0   06.01.2017 02:00:00  55  8     35
1   06.01.2017 02:00:00  55  8     22
2   06.01.2017 03:00:00  55  8     63
3   06.01.2017 03:00:00  55  8     33
4   06.01.2017 04:00:00  55  8     63
5   06.01.2017 04:00:00  55  8     45
6   06.01.2017 02:00:00  65  8     10
7   06.01.2017 02:00:00  65  8      5
8   06.01.2017 03:00:00  65  8     22
9   06.01.2017 03:00:00  65  8      5
10  06.01.2017 04:00:00  65  8     12
11  06.01.2017 04:00:00  65  8     15

df = df.groupby(['PERIOD_START_TIME','ID'], as_index=False)['VALUE'].max()            
df = df.groupby(['PERIOD_START_TIME','ID'])['VALUE'].max().reset_index()
print (df)
     PERIOD_START_TIME  ID  VALUE
0  06.01.2017 02:00:00  55     35
1  06.01.2017 02:00:00  65     10
2  06.01.2017 03:00:00  55     63
3  06.01.2017 03:00:00  65     22
4  06.01.2017 04:00:00  55     63
5  06.01.2017 04:00:00  65     15
df = df.loc[df.groupby(['PERIOD_START_TIME','ID'])['VALUE'].idxmax()]  
print (df)
      PERIOD_START_TIME  ID  A  VALUE
0   06.01.2017 02:00:00  55  8     35
6   06.01.2017 02:00:00  65  8     10
2   06.01.2017 03:00:00  55  8     63
8   06.01.2017 03:00:00  65  8     22
4   06.01.2017 04:00:00  55  8     63
11  06.01.2017 04:00:00  65  8     15 
cols = ['PERIOD_START_TIME','ID']
df = df.sort_values(cols).groupby(cols, as_index=False).first()
print (df)
     PERIOD_START_TIME  ID  A  VALUE
0  06.01.2017 02:00:00  55  8     35
1  06.01.2017 02:00:00  65  8     10
2  06.01.2017 03:00:00  55  8     63
3  06.01.2017 03:00:00  65  8     22
4  06.01.2017 04:00:00  55  8     63
5  06.01.2017 04:00:00  65  8     12