让我们说我有一个列表/可迭代的n(其中n是函数未知的)Pandas Series表示逻辑布尔索引,我喜欢AND所有这些都是元素和使用生成的Series来索引DataFrame。
目前,我正在使用np.logical_and(x1,x2)
和for循环执行此操作。我使用itertools.izip
或zip
并没有太多运气。大熊猫。系列对象似乎并不喜欢被他们操作。
我现在一直在摸不着头脑,看看为什么这似乎会导致一系列布尔值,但我会在执行时得到IndexingError: Unalignable boolean Series key provided
。
有什么想法?我觉得,因为这些ndarray
必须有一些明显干净的方法来做到这一点。
答案 0 :(得分:4)
假设我了解你,你可以使用logical_and.reduce
。从系列列表开始:
>>> 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
。
请记住,您还可以使用any
和all
,例如
>>> df = pd.DataFrame(ss)
>>> df.all()
0 False
1 False
2 True
3 False
4 False
dtype: bool