dataframe列明智地比较另一个系列

时间:2013-05-30 14:19:44

标签: pandas

似乎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.291535False-1.242351 < 0.151702True,因此这是列式比较。但打印输出为False False

1 个答案:

答案 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