合并两个TRUE / FALSE数据框列,仅保留TRUE

时间:2019-02-03 20:54:42

标签: python pandas dataframe

我在熊猫数据框中有两列,如下所示:

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 :(得分:3)

好像您需要any函数,

df['result_col'] = df.any(axis=1)

答案 1 :(得分:3)

您可以只使用“或”(|)运算符。

例如:

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

答案 2 :(得分:2)

为了获得更好的性能,您可以使用基础的numpy数组并计算两列的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)