我有一个带有两个指标变量列的数据框。我想创建一个第三列,它是两个现有列的逻辑OR
。我能够像这样:
df = DataFrame ({"a" : [1,0,0] , "b" : [0,0,1] })
df["c"] = (df["a"] | df["b"]).apply(lambda x : 1 if x else 0)
(df["a"] | df["b"])
生成的系列属于bool
类型。这让我感到惊讶,因为|
是一个按位运算符,所以我希望该系列是int
类型。因此,我必须执行apply(lambda ...)
才能获得所需的int
列。
我是正确地做了这个还是有更简洁/熊猫首选/ pythonic方式?
答案 0 :(得分:1)
使用astype
:
df["c"] = (df["a"] | df["b"]).astype(int)
|
实际上不是按位运算符。它将调用方法__or__
。
这可以根据需要实施。
所以这个:
df['a'] | df['b']
实际上称之为:
df['a'].__or__(df['b'])