按两列分组,最大值为python中的第三列
我有一个数据帧,它有周期\开始\时间、ID、更多的列和列值。 我需要的是按时段\开始\时间和ID分组(因为按时间和ID有重复的行),并取列值的最大值。 df: 期望输出:按两列分组,最大值为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
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