2016-05-26 8 views
0

Так что я DataFrame называется trips, содержащий следующую информацию:Выбор строки в DataFrame, которые не являются в серии

route_id  service_id shape_id      trip_id 
0  BX12 GH_B6-Weekday BX120805 GH_B6-Weekday-004000_BX12_1 
1  BX12 GH_B6-Weekday BX120809 GH_B6-Weekday-009000_BX12_1 
2  BX12 GH_B6-Weekday BX120792 GH_B6-Weekday-013000_BX12_1 
3  BX12 GH_B6-Weekday BX120809 GH_B6-Weekday-017000_BX12_1 
4  BX12 GH_B6-Weekday BX120792 GH_B6-Weekday-021000_BX12_1 
... 

У меня также есть серия под названием invalidTrips, содержащий следующую информацию:

trip_id 
11760139-BPPB6-BP_B6-Weekday-10   16 
11760139-BPPB6-BP_B6-Weekday-10-SDon 16 
11760140-BPPB6-BP_B6-Weekday-10   19 
11760140-BPPB6-BP_B6-Weekday-10-SDon 19 
11760141-BPPB6-BP_B6-Weekday-10   16 
... 

Как бы выбрать все строки в trips, которые не имеют trip_id соответствие с trip_id в invalid_trips?

EDIT: Так что теперь у меня есть этот код:

# Grab the number of trips made outside min and max hour. 
tooEarly = stopTimes['arrival_time'] < base_mintime 
tooLate = stopTimes['departure_time'] > base_maxtime 
invalidTrips = stopTimes[(tooEarly | tooLate)].groupby('trip_id').size() 

# Filter out the invalid trips. 
print(invalidTrips.size) 
print(trips.size) 
in_validTrips = ~trips.trip_id.isin(invalidTrips) 
validTrips = trips[in_validTrips][['route_id', 'service_id', 'shape_id']] 
print(validTrips.size) 

по какой-либо причине, даже если invalidTrips.size может меняться в зависимости от base_mintime и base_maxtime, validTrips.size остается постоянным, хотя я бы ожидать, что она будет обратно пропорциональна invalidTrips.size. Почему это так?

(Для получения дополнительной справочной информации, все это тянет из данных GTFS.)

+1

Это тесно связано с http://stackoverflow.com/questions/12065885/how-to-filter-the-dataframe-rows-of-pandas-by-within-in в основном вы можете сделать '' поездки – EdChum

ответ

2

UPDATE:

попробовать isin() функция и ~ оператор

согласно @ EdChum-х коррекции в комментарии - если invalid_trips имеет тип серии:

trips[~trips.trip_id.isin(invalidTrips.index)] 

TEST:

In [39]: invalidTrips 
Out[39]: 
trip_id 
11760139-BPPB6-BP_B6-Weekday-10   16 
11760139-BPPB6-BP_B6-Weekday-10-SDon 16 
11760140-BPPB6-BP_B6-Weekday-10   19 
11760140-BPPB6-BP_B6-Weekday-10-SDon 19 
11760141-BPPB6-BP_B6-Weekday-10   16 
GH_B6-Weekday-017000_BX12_1    11   # <-- i've added it intentionally 
Name: val, dtype: int64 

In [40]: trips 
Out[40]: 
    route_id  service_id shape_id      trip_id 
0  BX12 GH_B6-Weekday BX120805 GH_B6-Weekday-004000_BX12_1 
1  BX12 GH_B6-Weekday BX120809 GH_B6-Weekday-009000_BX12_1 
2  BX12 GH_B6-Weekday BX120792 GH_B6-Weekday-013000_BX12_1 
3  BX12 GH_B6-Weekday BX120809 GH_B6-Weekday-017000_BX12_1 # <-- exclude this row 
4  BX12 GH_B6-Weekday BX120792 GH_B6-Weekday-021000_BX12_1 

In [41]: trips[~trips.trip_id.isin(invalidTrips.index)] 
Out[41]: 
    route_id  service_id shape_id      trip_id 
0  BX12 GH_B6-Weekday BX120805 GH_B6-Weekday-004000_BX12_1 
1  BX12 GH_B6-Weekday BX120809 GH_B6-Weekday-009000_BX12_1 
2  BX12 GH_B6-Weekday BX120792 GH_B6-Weekday-013000_BX12_1 
4  BX12 GH_B6-Weekday BX120792 GH_B6-Weekday-021000_BX12_1 
+0

я получаю сообщение об ошибке: 'AttributeError: [~ поездки [ 'trip_id'] ISIN (invalid_trips).] объект серии 'не имеет атрибута«trip_id'' – user1834200

+0

@EdChum, конечно, спасибо - я исправил ответ – MaxU

+1

относительно ошибку, серии не имеют столбцов так 'поездка [~ trips.trip_id.isin (invalid_trips)]' должен работать – EdChum