if оператор python для значений столбцов - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь написать следующую логику в python:

, если столбец A равен «123», а столбец B «456», то столбец c = 0

Я пыталсяследующая функция, но возвращает ошибку:

 def testfunc(df):
     if df['columna'] == 123:
         if df['columnb'] ==456:
             df['columnc']=0

 return df
 testfunc()

error:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Что я делаю не так?

1 Ответ

0 голосов
/ 29 ноября 2018

Используйте numpy.where и цепочечные условия с & для побитового AND:

Решение, если существует, столбец columnc:

def testfunc(df):
    m1 = df['columna'] == 123
    m2 = df['columnb'] == 456
    df['columnc']= np.where(m1 & m2, 0, df['columnc'])
    return df

Еслине существует, необходимо определить оба значения, такие как 0 и 10:

def testfunc(df):
    m1 = df['columna'] == 123
    m2 = df['columnb'] == 456
    df['columnc']= np.where(m1 & m2, 0, 10)
    return df

Образец :

df = pd.DataFrame({
         'columna':[123,123,4,5],
         'columnb':[456,8,456,4],
         'columnc':[1,3,5,7],

})
print (df)
   columna  columnb  columnc
0      123      456        1
1      123        8        3
2        4      456        5
3        5        4        7

def testfunc(df):
    m1 = df['columna'] == 123
    m2 = df['columnb'] == 456
    df['columnc']= np.where(m1 & m2, 0, df['columnc'])
    return df

df1 = testfunc(df)
print (df1)
   columna  columnb  columnc
0      123      456        0
1      123        8        3
2        4      456        5
3        5        4        7
def testfunc(df):
    m1 = df['columna'] == 123
    m2 = df['columnb'] == 456
    df['columnc']= np.where(m1 & m2, 0, 10)
    return df

df1 = testfunc(df)
print (df1)
   columna  columnb  columnc
0      123      456        0
1      123        8       10
2        4      456       10
3        5        4       10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...