Для циклов и операторов if в Pandas Dataframe - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь получить значения строк, если выполняются определенные условия

вот код

response='108'
group="MAMA"
optout='False'

for row in merged_df:
        if row==response & row==group & row==optout:
            print(merged_df['phone'])

Мой фрейм данных выглядит так

phone       group   County  PNC/ANC Facility Name   Optedout    Facility Code
25470000000 MAMA    Orange  PNC     Main Centre       FALSE      112
25470000000 MAMA    Orange  PNC     Main Centre       FALSE      112
25470000010 MAMA    Orange  PNC     Centre            FALSE      108
25470000020 MAMA    Orange  PNC     Centre            FALSE      108
25470000000 MAMA    Orange  PNC     Main Centre       FALSE      112

Это ошибка я получаю

    read_masterFacility()
  File "readsheet.py", line 48, in read_masterFacility
    if row==response & row==group & row==optout:
TypeError: unsupported operand type(s) for &: 'int' and 'str'

желаемый вывод

25470000010 
25470000020

Как я могу сделать это лучше ??

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Ошибка возникает из-за того, что & является побитовым сравнением. Также вторая проблема заключается в том, что если merged_df является фреймом данных, for row in merged_df будет перебирать только имена столбцов. Вы должны сделать это так:

Отредактированный код:

phones = merged_df.loc[(merged_df['Facility Code'] == response) & (merged_df['group'] == group) & (merged_df['Optedout'] == optout)]['phone'].values
print(phones)
0 голосов
/ 03 апреля 2020

Вам понадобится следующее:

if ((row["Facility Code"]==response and row["group"]==group) and row["optedout"]=optout):

Это работает, потому что вы проверяете значения в строке для каждого из этих столбцов. Вам нужно указать столбец, который вы проверяете. '&' также побитовое и в Python.

Кроме того, я думаю, что вы хотите распечатать строку ["phone"].

...