Проверьте, совпадают ли значения нескольких столбцов (python) - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть binairy dataframe, и я хотел бы проверить, все ли значения в определенной строке имеют значение 1. Так, например, у меня есть ниже dataframe.Поскольку строка 0 и строка 2 содержат значение 1 в столбцах от col1 до col3, результат должен быть равен 1, если нет, то он должен быть равен 0.

import pandas as pd
d = {'col1': [1, 0,1,0], 'col2': [1, 0,1, 1], 'col3': [1,0,1,1], 'outcome': [1,0,1,0]}
df = pd.DataFrame(data=d)

Поскольку мой собственный массив данных намного больше, я ищуболее элегантный способ, чем следующие, есть мысли?

def similar(x):
    if x['col1'] == 1 and x['col2'] == 1 and x['col3'] == 1:
        return 1
    else:
        ''
df['outcome'] = df.apply(similar, axis=1)

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Классический чехол all.

(iloc просто для игнорирования вашего текущего col результата, если у вас его нет, вы можете просто использовать df == 1.)

df['outcome'] = (df.iloc[:,:-1] == 1).all(1).astype(int) 


    col1    col2    col3    outcome
0   1        1      1           1
1   0        0      0           0
2   1        1      1           1
3   0        1      1           0
0 голосов
/ 20 августа 2019

Это более общее и работает для любого другого значения.Просто замените второй == 1 на == <your value>.

df['outcome'] = 0
df.loc[df.loc[(df.iloc[:,:-1].nunique(axis=1) == 1) \
    & (df.iloc[:,:-1] == 1).all(axis=1)].index, 'outcome'] = 1
0 голосов
/ 12 февраля 2019

Попробуйте вместо этого:

df['outcome'] = df.apply(lambda x: 1 if df['col1']==1 and df['col2']==1 and df['col3']==1 else '', axis=1)
...