似乎dataframe.le不按列方式操作。
df = DataFrame(randn(8,12))
series=Series(rand(8))
df.le(series)
我希望df
中的每一列都会与series
进行比较(因此总共有12列与series
进行比较,因此涉及12列* 8行比较)。但是对于df
中的每个元素,它将与series
中的每个元素进行比较,因此这将涉及12(列)* 8(行)* 8(串联元素)比较。我如何实现逐列比较?
第二个问题是,一旦我完成了列式比较,我希望能够计算每行有多少“真实”,我目前正在做astype(int32)
将bool变为int然后执行sum
,这听起来合理吗?
让我举一个关于第一个问题的例子来说明我的意思(使用一个更简单的例子,因为show 8 * 12很难):
>>>from pandas import *
>>>from numpy.random import *
>>>df = DataFrame(randn(2,5))
>>>t = DataFrame(randn(2,1))
>>>df
0 1 2 3 4
0 -0.090283 1.656517 -0.183132 0.904454 0.157861
1 1.667520 -1.242351 0.379831 0.672118 -0.290858
>>>t
0
0 1.291535
1 0.151702
>>>df.le(t)
0 1 2 3 4
0 True False False False False
1 False False False False False
我期望df的第1列应该是:
1
False
True
由于1.656517 < 1.291535
为False
且-1.242351 < 0.151702
为True
,因此这是列式比较。但打印输出为False False
。
答案 0 :(得分:1)
我不确定我是否理解了您问题的第一部分,但对于第二部分,您可以使用sum
计算布尔数据框架中的True
:
In [11]: df.le(s).sum(axis=0)
Out[11]:
0 4
1 3
2 7
3 3
4 6
5 6
6 7
7 6
8 0
9 0
10 0
11 0
dtype: int64
基本上le
正在测试每一列:
In [21]: df[0] < s
Out[21]:
0 False
1 True
2 False
3 False
4 True
5 True
6 True
7 True
dtype: bool
每个索引都在测试:
In [22]: df[0].loc[0] < s.loc[0]
Out[22]: False