0

似乎 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.291535isFalse-1.242351 < 0.151702is True,所以这是逐列比较。但是打印出来的是False False.

4

1 回答 1

1

我不确定我是否理解您问题的第一部分,但至于第二部分,您可以使用以下方法计算True布尔 DataFrame 中的 s sum

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
于 2013-05-30T14:34:38.530 回答