#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. О боже, да, такая ошибка! Спасибо!