Je veux obtenir le nombre de lignes de trame de données en fonction de la sélection conditionnelle. J'ai essayé le code suivant.
print df[(df.IP == head.idxmax()) & (df.Method == 'HEAD') & (df.Referrer == '"-"')].count()
sortie:
IP 57
Time 57
Method 57
Resource 57
Status 57
Bytes 57
Referrer 57
Agent 57
dtype: int64
La sortie affiche le nombre pour chacune des colonnes de la trame de données. Au lieu de cela, je dois obtenir un seul décompte où toutes les conditions ci-dessus sont remplies? Comment faire ça? Si vous avez besoin de plus d'explications sur mon dataframe, veuillez me le faire savoir.
Vous demandez la condition où toutes les conditions sont vraies, donc le cadre est la réponse, à moins que je ne comprenne mal ce que vous demandez
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
Pour des performances accrues, vous ne devez pas évaluer la trame de données à l'aide de votre prédicat. Vous pouvez simplement utiliser le résultat de votre prédicat directement comme illustré ci-dessous:
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
Gardez à l'esprit que cette technique ne fonctionne que pour compter le nombre de lignes conformes à votre prédicat.