我在熊猫数据框中有两列,如下所示:
df[1] df[2]
TRUE TRUE
FALSE TRUE
TRUE FALSE
FALSE FALSE
TRUE FALSE
FALSE FALSE
如何从这两列中创建以下新列:
df[3]
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
答案 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)