Pandas два кадра данных для l oop: как установить значение на старое значение + 1 - PullRequest
0 голосов
/ 16 марта 2020

Существует два кадра данных дороги и мосты .

Если километровая точка моста находится между началом и концом участка цепи, следует проверить, в каком состоянии находится этот мост (это A, B, C или D).

Если условие 'A' (это строка) ->, то на дорогах df значение под именем столбца 'BridgeA' должно стать старым значением + 1 .

В конце этого столбца будет показано, сколько мостов в условии A содержит сегмент дороги.

Код, который мы написали для этого, работает. Однако это приводит только к нулям в столбцах BridgeA, BridgeB, Bridge C и BridgeD.

Может кто-нибудь помочь нам, что идет не так?

for j in roads.index: # loop through all the rows in the roads file

    for i in bridges.index: # for every line in the bridges file
        if bridges.km[i] > roads.Chainage_begin.loc[j] and \
        bridges.km[i] < roads.Chainage_end.loc[j]: # if the bridge falls within the road segment

            if bridges.condition[i] == 'A':
                roads.BridgeA.loc[j] =+ 1
            elif bridges.condition[i] == 'B':
                roads['BridgeB'].loc[j] =+ 1
            elif bridges.condition[i] == 'C':
                roads['BridgeC'].loc[j] =+ 1
            elif bridges.condition[i] == 'D':
                roads['BridgeD'].loc[j] =+ 1

        else: # if it is out of range
            continue # go on to the next row in the roads file

1 Ответ

0 голосов
/ 16 марта 2020

Вы никогда не должны использовать df.column[row_index] или df[column][row_index]. Это работает, когда вы читаете значение, но подвержено ошибкам при попытке установить значение. Единственный надежный синтаксис:

df.loc[row_index, col] = ...

Так что здесь вы должны использовать:

        if bridges.condition[i] == 'A':
            roads.loc[j, 'BridgeA'] += 1
        elif bridges.condition[i] == 'B':
            roads.loc[j, 'BridgeB'] += 1
        elif bridges.condition[i] == 'C':
            roads.loc[j, 'BridgeC'] += 1
        elif bridges.condition[i] == 'D':
            roads.loc[j, 'BridgeD'] += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...