Изменение значения строки в соответствии с условием не работает в пандах - PullRequest
0 голосов
/ 31 августа 2018

У меня есть датафрейм:

 TYPE              NAME          IS_MAIN
 PPRTYPE           TIME            0
 PPRTYPE           SIGHT           0
 PPRTYPE           SIGHT           1
 PNRDTL            NOT FOUND       1
 PPRTYPE           SIGHT           0 
 PPRTYPE           TIME            1

Если TYPE равно PPRTYPE и NAME равно SIGHT, а IS_MAIN равно 1 тогда NAME из TYPE PNRDTL следует изменить на 'NOT APPLICABLE', если IS_MAIN равно 1.

Примечание : IS_MAIN = 1 для любого ТИПА придет только один раз.

Код:

temp = df.loc[(df['IS_MAIN'] == 1) & (df['TYPE'] == 'PPRTYPE'), 'NAME']
temp = temp.reset_index(drop=True)
temp = temp[0]
if (temp == 'SIGHT'):
     df.loc[(df['TYPE'] == 'PNRDTL') & (df['IS_MAIN'] == 1) , 'NAME'] = 'NOT APPLICABLE'

Проблема, с которой я сталкиваюсь, заключается в том, что

(df['TYPE'] == 'PNRDTL') & (df['IS_MAIN'] == 1)

не получает никакого значения, поэтому значение не изменяется.

Я был бы рад, если бы кто-то мог обнаружить ошибку, которую я совершаю, или рассказать мне какую-нибудь работу.

Большое спасибо.

1 Ответ

0 голосов
/ 31 августа 2018

у меня работает:

#if `1` is integer
mask = (df['IS_MAIN'] == 1) & (df['TYPE'] == 'PPRTYPE')
#if 1 is string
#mask = (df['IS_MAIN'] == '1') & (df['TYPE'] == 'PPRTYPE')

if (df.loc[mask, 'NAME'].iloc[0] == 'SIGHT'):
    df.loc[mask , 'NAME'] = 'NOT APPLICABLE'
print (df)
      TYPE            NAME  IS_MAIN
0  PPRTYPE            TIME        0
1  PPRTYPE           SIGHT        0
2  PPRTYPE  NOT APPLICABLE        1
3   PNRDTL       NOT FOUND        1
4  PPRTYPE           SIGHT        0
5  PPRTYPE  NOT APPLICABLE        1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...