我希望pandas数据框中的所有值都为True / False,具体取决于值是否在给定的x和y之间。
使用'AND'运算符组合2个数据帧,或者任何来自pandas的'between'功能组合都会很好。我宁愿不循环遍历列并调用pandas.Series.between(x,y)函数。
示例
给出以下数据框
>>> df = pd.DataFrame([{1:1,2:2,3:6},{1:9,2:9,3:10}])
>>> df
1 2 3
0 1 2 6
1 9 9 10
我想要x和y之间的所有值。例如,我可以从:
开始>>> df > 2
1 2 3
0 False False True
1 True True True
然后再做
>>> df < 10
1 2 3
0 True True True
1 True True False
但是
>>> df > 2 and df < 10
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\Laurens Koppenol\Anaconda2\lib\site-packages\pandas\core\generic.py", line 731, in __nonzero__
.format(self.__class__.__name__))
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
答案 0 :(得分:4)
将&
与括号一起使用(由于运算符优先级),and
并不了解如何处理布尔数组,因此警告:
In [64]:
df = pd.DataFrame([{1:1,2:2,3:6},{1:9,2:9,3:10}])
(df > 2) & (df < 10)
Out[64]:
1 2 3
0 False False True
1 True True False
可以将between
与apply
一起使用,但对于大型df来说这会更慢:
In [66]:
df.apply(lambda x: x.between(2,10, inclusive=False))
Out[66]:
1 2 3
0 False False True
1 True True False
请注意,每当您尝试使用and
,or
和not
比较df或系列时,都会引发此警告,您应该使用&
,{{ 1}}和|
分别为这些按位运算符理解如何正确处理数组
答案 1 :(得分:0)