我想根据条件选择得到数据帧行的计数.我尝试了以下代码.
print df[(df.IP == head.idxmax()) & (df.Method == 'HEAD') & (df.Referrer == '"-"')].count()
Run Code Online (Sandbox Code Playgroud)
输出:
IP 57
Time 57
Method 57
Resource 57
Status 57
Bytes 57
Referrer 57
Agent 57
dtype: int64
Run Code Online (Sandbox Code Playgroud)
输出显示数据框中每列的每个列的计数.相反,我需要获得满足上述所有条件的单一计数?这该怎么做?如果您需要有关我的数据帧的更多说明,请告诉我.
Jef*_*eff 58
你问的条件是所有的条件都是真的,所以框架的len是答案,除非我误解了你的要求
In [17]: df = DataFrame(randn(20,4),columns=list('ABCD'))
In [18]: df[(df['A']>0) & (df['B']>0) & (df['C']>0)]
Out[18]:
A B C D
12 0.491683 0.137766 0.859753 -1.041487
13 0.376200 0.575667 1.534179 1.247358
14 0.428739 1.539973 1.057848 -1.254489
In [19]: df[(df['A']>0) & (df['B']>0) & (df['C']>0)].count()
Out[19]:
A 3
B 3
C 3
D 3
dtype: int64
In [20]: len(df[(df['A']>0) & (df['B']>0) & (df['C']>0)])
Out[20]: 3
Run Code Online (Sandbox Code Playgroud)
flo*_*w2k 10
在 Pandas 中,我喜欢使用shape属性来获取行数。
df[df.A > 0].shape[0]
Run Code Online (Sandbox Code Playgroud)
根据需要给出与条件匹配的行数A > 0。
为了提高性能,您不应使用谓词评估数据框。您可以直接使用谓词的结果,如下所示:
In [1]: import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(20,4),columns=list('ABCD'))
In [2]: df.head()
Out[2]:
A B C D
0 -2.019868 1.227246 -0.489257 0.149053
1 0.223285 -0.087784 -0.053048 -0.108584
2 -0.140556 -0.299735 -1.765956 0.517803
3 -0.589489 0.400487 0.107856 0.194890
4 1.309088 -0.596996 -0.623519 0.020400
In [3]: %time sum((df['A']>0) & (df['B']>0))
CPU times: user 1.11 ms, sys: 53 µs, total: 1.16 ms
Wall time: 1.12 ms
Out[3]: 4
In [4]: %time len(df[(df['A']>0) & (df['B']>0)])
CPU times: user 1.38 ms, sys: 78 µs, total: 1.46 ms
Wall time: 1.42 ms
Out[4]: 4
Run Code Online (Sandbox Code Playgroud)
请记住,此技术仅适用于计算符合谓词的行数。
您可以使用该方法query并获取shape结果数据帧的。例如:
A B C
0 1 1 x
1 2 2 y
2 3 3 z
df.query("A == 2 & B > 1 & C != 'z'").shape[0]
Run Code Online (Sandbox Code Playgroud)
输出:
1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76705 次 |
| 最近记录: |