在不确定数量的Pandas数据系列上进行逐元素逻辑AND操作。

4
假设我有一个包含n个(其中n是未知的)Pandas Series的列表/可迭代对象,它们代表逻辑布尔索引,我想对它们进行逐元素AND操作,并使用生成的Series对DataFrame进行索引。目前,我正在使用np.logical_and(x1,x2)和一个for循环来完成这个过程。使用itertools.izip或zip似乎并不顺利。pandas.Series对象似乎不喜欢被它们操作。我已经为此苦恼了一段时间,不知道为什么这似乎会导致布尔值Series,但在执行时却出现"IndexingError: Unalignable boolean Series key provided"错误。有什么想法吗? 我觉得既然它们是ndarray,肯定有一些明显简洁的方法来做到这一点。
1个回答

8

假设我理解您的意思,您可以使用 logical_and.reduce。从一系列的 Series 开始:

>>> ss = [pd.Series([ True, False,  True, False,  True]), pd.Series([False,  True,  True, False, False]), pd.Series([False, False,  True, False,  True]), pd.Series([False,  True,  True, False, False]), pd.Series([ True,  True,  True,  True, False])]

它的外观可能类似于:
>>> pd.DataFrame(ss)
       0      1     2      3      4
0   True  False  True  False   True
1  False   True  True  False  False
2  False  False  True  False   True
3  False   True  True  False  False
4   True   True  True   True  False

[5 rows x 5 columns]

如果它是一个数据框,你可以沿着列方向进行缩减操作:
>>> np.logical_and.reduce(ss)
array([False, False,  True, False, False], dtype=bool)

如果您想要另一个方向,可以传递axis=1

请记住,您还可以使用anyall,例如:

>>> df = pd.DataFrame(ss)
>>> df.all()
0    False
1    False
2     True
3    False
4    False
dtype: bool

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接