Объединение двух столбцов данных ИСТИНА / ЛОЖЬ с сохранением только ИСТИНЫ - PullRequest
0 голосов
/ 03 февраля 2019

У меня есть два столбца в кадре данных pandas, как показано ниже:

df[1]   df[2]
TRUE    TRUE
FALSE   TRUE
TRUE    FALSE
FALSE   FALSE
TRUE    FALSE
FALSE   FALSE

Из этих двух столбцов как создать следующий новый столбец:

df[3]
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE

Ответы [ 3 ]

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

Для лучшей производительности вы можете использовать базовые массивы и вычислять np.logical_or из двух столбцов:

df.loc[:,'logical_or'] = np.logical_or(*df.values.T))

    col1   col2    logical_or
0   True   True        True
1  False   True        True
2   True  False        True
3  False  False       False
4   True  False        True
5  False  False       False

Некоторые сравнения времени:

df = pd.DataFrame(np.random.randint(0,2,(10**6,2)).astype(bool))

%timeit np.logical_or(*df.values.T)
4.98 ms ± 33.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit df.any(axis=1)
50 ms ± 292 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit df[0] | df[1]
6.57 ms ± 154 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
0 голосов
/ 04 февраля 2019

Вы можете просто использовать оператор "или" (|).

Например:

df = pd.DataFrame({'a' : [True, False, True, False, True, False], 'b': [True, True, False, False, False, False]})

df['c'] = df.a | df.b

С результатом:

       a      b      c
0   True   True   True
1  False   True   True
2   True  False   True
3  False  False  False
4   True  False   True
5  False  False  False
0 голосов
/ 04 февраля 2019

Похоже, вам нужна функция any, например:

df['result_col'] = df.any(axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...