Панды заполнить недостающие остановки в расписании - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть два разных кадра данных:
Первый кадр данных хранит некоторые возможные соединения поездов (например, расписание):

index route start stop
0     1     a     b
1     1     b     c
2     1     c     d
3     1     d     e
4     2     g     h
5     2     h     i
6     2     i     j

Второй кадр данных - это измерение фактических остановок поездов:

index start stop passengers
0     a     b    2
1     b     d    4
2     a     c    1
3     c     d    2
4     g     j    5

Иногда поезд не останавливается на станции.Я пытаюсь добиться того, чтобы заполнить недостающие остановки и по-прежнему отслеживать измерения пассажиров:

index route start stop passengers
0     1     a     b    2
1     1     b     c    4
2     1     c     d    4
3     1     a     b    1
4     1     b     c    1
5     1     c     d    2
6     2     g     h    5
7     2     h     i    5
8     2     i     j    5

В результате я просто хотел бы заполнить все пропущенные остановки.

1 Ответ

0 голосов
/ 27 сентября 2018

Как указал Вэнь Цзябао, Панды, вероятно, не оптимальны для представления таких данных.Если вы хотите работать с Pandas, я бы рекомендовал переключаться с «соединяющих станций» через их близость в df (следующий ряд = следующая станция, если это не другой маршрут / с использованием букв для определения порядка) на числовые идентификаторы и сохранение маршрутов, имени т. д. в разных колонках.Если вы используете числовые идентификаторы, вот возможная реализация сложения пассажиров.Различные маршруты различаются по номеру 100 + или номеру 200 +:

table = pd.DataFrame({'route':['g','g','g','g','r','r','r'],'start':[101,102,103,104,201,202,203],
                  'stop':[102,103,104,105,202,203,204],'count':[0,0,0,0,0,0,0]})
passenger = pd.DataFrame({'start':[101,102,202],'stop':[104,103,204],
                         'passenger':[2,5,3]})

count = list(zip(passenger.start.tolist(),passenger.stop.tolist(),passenger.passenger.tolist())) #merge the start, stop and count into one list for each entry
for c in count:
    for x in range(c[0],c[1]+1): #go through each stop and add the count to the train table
        table['count'] = np.where(table.start == x, table['count'] + c[2], table['count'])
table #Now with the passenger data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...