2017-06-27 11 views
2

私は、PERIOD_START_TIME、ID、さらにいくつかの列とVALUE列のデータフレームを持っています。 私が必要とするのは、PERIOD_START_TIMEとID(時間とIDで重複する行があるため)によるグループで、VALUE列の最大値をとります。 DF:pandasのpythonで2つの列と3番目の最大値のグループ

PERIOD_START_TIME  ID  VALUE 
06.01.2017 02:00:00 55 ... 35 
06.01.2017 02:00:00 55 ... 22 
06.01.2017 03:00:00 55 ... 63 
06.01.2017 03:00:00 55 ... 33 
06.01.2017 04:00:00 55 ... 63 
06.01.2017 04:00:00 55 ... 45 
06.01.2017 02:00:00 65 ... 10 
06.01.2017 02:00:00 65 ... 5 
06.01.2017 03:00:00 65 ... 22 
06.01.2017 03:00:00 65 ... 5 
06.01.2017 04:00:00 65 ... 12 
06.01.2017 04:00:00 65 ... 15 

所望の出力:

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 

答えて

4

使用groupbyと集計max

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 

idxmaxを必要とlocによって選択:

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 
+0

それだ、感謝を。しかし、どうやって3つのカラムだけでなく、他のカラムも保持できますか? – jovicbg

+0

編集した回答を確認してください。 – jezrael

関連する問題