Как выбрать строки с максимальным значением для столбца, сгруппировав их по другим столбцам в Pandas - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть набор данных, как показано ниже (df). Я хочу выбрать только строки с максимальным unixtime для заданной даты в соответствии с координатами.

Как это можно сделать

    coord           date             unixtime         A              B
0   47.62042:122.3494   2019-11-04  1572825600000   1.24             0      
1   47.62042:122.3494   2019-11-04  1572847200000   1.87             0.2        
2   47.62042:122.3494   2019-11-04  1572868800000   7.56             0.3        
3   47.62042:122.3494   2019-11-04  1572890400000   10.06            0      
4   47.62042:122.3494   2019-11-05  1572912000000   6.94             0      
5   47.62042:122.3494   2019-11-05  1572933600000   5.34             0      
6   47.62042:122.3494   2019-11-05  1572955200000   1.39             0      
7   47.62042:122.3494   2019-11-05  1572976800000   0.76             0.2        
8   47.62042:122.3494   2019-11-06  1572998400000   0.63             0      
9   25.27699:55.29625   2019-11-04  1572825600000   3.61             0.7        
10  25.27699:55.29625   2019-11-04  1572847200000   5.28             0      
11  25.27699:55.29625   2019-11-04  1572868800000   6.94             0      
12  25.27699:55.29625   2019-11-04  1572890400000   5.28             0      
13  25.27699:55.29625   2019-11-05  1572912000000   2.50             0.6        
14  25.27699:55.29625   2019-11-05  1572933600000   1.67             0      
15  25.27699:55.29625   2019-11-05  1572955200000   3.89             0      
16  25.27699:55.29625   2019-11-05  1572976800000   2.50             0      
17  25.27699:55.29625   2019-11-06  1572998400000   3.06             0.4    

Ожидаемый результат

      coord             date        unixtime    A                    B  
    47.62042:122.3494   2019-11-04  1572890400000   10.06            0              
    47.62042:122.3494   2019-11-05  1572976800000   0.76             0.2        
    47.62042:122.3494   2019-11-06  1572998400000   0.63             0              
    25.27699:55.29625   2019-11-04  1572890400000   5.28             0          
    25.27699:55.29625   2019-11-05  1572976800000   2.50             0      
    25.27699:55.29625   2019-11-06  1572998400000   3.06             0.4    

Как это можно сделать?

1 Ответ

1 голос
/ 04 ноября 2019

Вы можете сделать drop_duplicates

df=df.sort_values('unixtime').drop_duplicates(['coord','date'],keep='last')
Out[145]: 
                coord        date       unixtime      A    B
3   47.62042:122.3494  2019-11-04  1572890400000  10.06  0.0
12  25.27699:55.29625  2019-11-04  1572890400000   5.28  0.0
7   47.62042:122.3494  2019-11-05  1572976800000   0.76  0.2
16  25.27699:55.29625  2019-11-05  1572976800000   2.50  0.0
8   47.62042:122.3494  2019-11-06  1572998400000   0.63  0.0
17  25.27699:55.29625  2019-11-06  1572998400000   3.06  0.4

Или

df.loc[df.groupby(['coord','date']).unixtime.idxmax()]
Out[146]: 
                coord        date       unixtime      A    B
12  25.27699:55.29625  2019-11-04  1572890400000   5.28  0.0
16  25.27699:55.29625  2019-11-05  1572976800000   2.50  0.0
17  25.27699:55.29625  2019-11-06  1572998400000   3.06  0.4
3   47.62042:122.3494  2019-11-04  1572890400000  10.06  0.0
7   47.62042:122.3494  2019-11-05  1572976800000   0.76  0.2
8   47.62042:122.3494  2019-11-06  1572998400000   0.63  0.0
...