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

问题描述 投票:2回答:3

我在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
python pandas dataframe
3个回答
3
投票

看起来你需要any功能,就像那样:

df['result_col'] = df.any(axis=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
投票

为了获得更好的性能,您可以使用底层的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)
© www.soinside.com 2019 - 2024. All rights reserved.