pand фильтруют df по совокупности сбоев

#pandas #pandas-groupby #aggregate

#pandas #pandas-groupby #совокупный

Вопрос:

Мой df:

     Plate       Route   Speed   Dif     Latitude    Longitude
1   724TL054M   RUTA 23     0   32.0    19.489872   -99.183970
2   0350021     RUTA 35     0   33.0    19.303572   -99.083700
3   0120480     RUTA 12     0   32.0    19.356400   -99.125694
4   1000106     RUTA 100    0   32.0    19.212614   -99.131874
5   0030719     RUTA 3      0   36.0    19.522831   -99.258500
...     ...     ...     ...     ...     ...     ...
1617762     923CH113M   RUTA 104    0   33.0    19.334467   -99.016880
1617763     0120077     RUTA 12     0   32.0    19.302448   -99.084530
1617764     0470053     RUTA 47     0   33.0    19.399706   -99.209190
1617765     0400070     CETRAM      0   33.0    19.265041   -99.163290
1617766     0760175     RUTA 76     0   33.0    19.274513   -99.240150
 

Я хочу отфильтровать те таблицы, которые, когда их суммированный Dif (и, следовательно, я сделал groupby) больше 3600 (1 час, поскольку Dif равен секундам), сохраняют их. В противном случае удалите их.

Я попробовал (после публикации отсюда):

 df.groupby('Plate').filter(lambda x: x['Dif'].sum() > 3600)
 

Но я все равно получаю около 60 пластин с суммой менее 3600:

 df.groupby('Plate').agg({'Dif':'sum'}).reset_index().nsmallest(60, 'Dif')

        Plate       Dif
952     655NZ035M   268.0
1122    949CH002C   814.0
446     0440220     1318.0
1124    949CH005C   1334.0
1042    698NZ011M   1434.0
1038    697NZ011M   1474.0
1       0010193     1509.0
282     0270302     1513.0
909     614NZ021M   1554.0
156     0140236     1570.0
425     0430092     1577.0
603     0620123     1586.0
510     0530029     1624.0
213     0180682     1651.0
736     0800126     1670.0
 

Я потратил на это несколько часов, и я не могу это решить. Любая помощь приветствуется.

Ответ №1:

Назначьте его обратно

 df = df.groupby('Plate').filter(lambda x: x['Dif'].sum() > 3600)
 

Затем

 df.groupby('Plate').agg({'Dif':'sum'}).reset_index().nsmallest(60, 'Dif')
 

Комментарии:

1. О боже, да, такая ошибка! Спасибо!