合并两个TRUE / FALSE数据帧列,仅保留TRUE
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并两个TRUE / FALSE数据帧列,仅保留TRUE相关的知识,希望对你有一定的参考价值。
我在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
答案
看起来你需要any
功能,就像那样:
df['result_col'] = df.any(axis=1)
另一答案
您可以使用“或”(|
)运算符。
例如:
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
另一答案
为了获得更好的性能,您可以使用底层的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)
以上是关于合并两个TRUE / FALSE数据帧列,仅保留TRUE的主要内容,如果未能解决你的问题,请参考以下文章
将两个数据帧与一些常见列合并,其中共同需要的组合是自定义函数