Python - Панды заменяют значение в столбце, если другой столбец имеет значение в списке - PullRequest
0 голосов
/ 12 мая 2018

У меня есть сотни тысяч строк, которые выглядят примерно так (на самом деле данных больше, чем просто, но я пытаюсь упростить идею, которую я пытался) ...

index  status       location
0      infected     area5
1      healthy      area6
2      healthy      area3
3      infected     area8
4      healthy      area1
5      healthy      area8
6      healthy      area5
7      healthy      area2
8      healthy      area4
9      healthy      area10
10     ....          ....

Я пытаюсь обновить столбец status, основываясь на том, заражена ли область. Поэтому я в основном составил список зараженных областей:

infected_areas = ['area5', 'area8']

Тогда я пытаюсь просмотреть все строки (или просто "здоровые" строки), и, если они совпадают с тем, что есть в моем списке infected_areas, изменить это status. зараженным.

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

index  status       location
0      infected     area5
1      healthy      area6
2      healthy      area3
3      infected     area8
4      healthy      area1
5      infected     area8
6      infected     area5
7      healthy      area2
8      healthy      area4
9      healthy      area10
10     ....          ....

Вот то, с чем я работал, но никуда не деться:

`df [df ['location']. Isin (location)] ['status'] = 'заражен'

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Просто используя .loc

df.loc[df.location.isin(infected_areas),'status']='infected'
df
Out[49]: 
   index    status location
0      0  infected    area5
1      1   healthy    area6
2      2   healthy    area3
3      3  infected    area8
4      4   healthy    area1
5      5  infected    area8
6      6  infected    area5
7      7   healthy    area2
8      8   healthy    area4
9      9   healthy   area10
0 голосов
/ 12 мая 2018

Вы можете использовать pd.Series.isin в сочетании с pd.Series.where:

infected_areas = ['area5', 'area8']

df.status.where(
    ~df.location.str.strip().isin(infected_areas),
    other='infected',
    inplace=True)
>>> df
    index   status  location
0   0   infected    area5
1   1   healthy area6
2   2   healthy area3
3   3   infected    area8
4   4   healthy area1
5   5   infected    area8
6   6   infected    area5
7   7   healthy area2
8   8   healthy area4
9   9   healthy area10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...