it-swarm.com.de

Ruft die Anzahl der Datenrahmenzeilen basierend auf den Bedingungen ab

Ich möchte die Anzahl der Datenrahmenzeilen basierend auf der bedingten Auswahl ermitteln. Ich habe den folgenden Code ausprobiert.

print df[(df.IP == head.idxmax()) & (df.Method == 'HEAD') & (df.Referrer == '"-"')].count()

ausgabe:

IP          57
Time        57
Method      57
Resource    57
Status      57
Bytes       57
Referrer    57
Agent       57
dtype: int64

Die Ausgabe zeigt die Anzahl für jede und jede Spalte im Datenrahmen. Muss ich stattdessen eine einzige Zählung durchführen, wenn alle oben genannten Bedingungen erfüllt sind? Wie macht man das? Wenn Sie weitere Erläuterungen zu meinem Datenrahmen benötigen, lassen Sie es mich bitte wissen.

39

Sie fragen nach der Bedingung, bei der alle Bedingungen zutreffen, also ist len ​​des Rahmens die Antwort, es sei denn, ich verstehe falsch, was Sie fragen

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
56
Jeff

Um die Leistung zu steigern, sollten Sie den Datenrahmen nicht mit Ihrem Prädikat auswerten. Sie können das Ergebnis Ihres Prädikats einfach direkt wie unten dargestellt verwenden:

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

Beachten Sie, dass diese Technik nur zum Zählen der Anzahl der Zeilen funktioniert, die Ihrem Prädikat entsprechen.

6
Enias Cailliau