2017-09-07 1 views
0

ich einen Datensatz wie dieses:Pandas: Count Kundenfahrten enden in einem Central Park

     end station name User Type 
0     Carmine St & 6 Ave Subscriber 
1   South End Ave & Liberty St Subscriber 
2  Christopher St & Greenwich St Subscriber 
3    Lafayette St & Jersey St Subscriber 
4      W 52 St & 11 Ave Subscriber 
5    E 53 St & Lexington Ave Subscriber 
6      W 17 St & 8 Ave Subscriber 
7     St Marks Pl & 2 Ave Subscriber 
8 Grand Army Plaza & Central Park S Customer 
9    Barclay St & Church St Subscriber 
10  Washington St & Gansevoort St Customer 
11    E 37 St & Lexington Ave Subscriber 
12      E 51 St & 1 Ave Subscriber 
13      W 33 St & 7 Ave Subscriber 
14     Pike St & Monroe St Subscriber 
15    E 24 St & Park Ave S Subscriber 
16      1 Ave & E 15 St Subscriber 
17    Central Park S & 6 Ave Customer 
18      E 39 St & 3 Ave Customer 
19     W 59 St & 10 Ave Subscriber 
20    Central Park S & 6 Ave Subscriber 
21      9 Ave & W 45 St Customer 
22      8 Ave & W 33 St Subscriber 
23    Suffolk St & Stanton St Subscriber 
24     W 47 St & 10 Ave Subscriber 
25      W 33 St & 7 Ave Subscriber 
26      8 Ave & W 33 St Subscriber 
27      1 Ave & E 15 St Customer 
28      8 Ave & W 33 St Subscriber 
29      W 33 St & 7 Ave Subscriber 
...        ...   ... 
1085646    10 Ave & W 28 St Subscriber 
1085647   Central Park S & 6 Ave Customer 
1085648    W 52 St & 9 Ave Subscriber 
1085649   Perry St & Bleecker St Subscriber 
1085650  Allen St & E Houston St Subscriber 
1085651   Norfolk St & Broome St Subscriber 
1085652    11 Ave & W 27 St Subscriber 
1085653   John St & William St Subscriber 
1085654    W 43 St & 10 Ave Customer 
1085655  Cleveland Pl & Spring St Subscriber 
1085656 MacDougal St & Washington Sq Customer 
1085657  Elizabeth St & Hester St Subscriber 
1085658   St Marks Pl & 1 Ave Subscriber 
1085659    E 33 St & 2 Ave Subscriber 
1085660    W 56 St & 10 Ave Subscriber 
1085661 Brooklyn Bridge Park - Pier 2 Customer 
1085662    W 21 St & 6 Ave Subscriber 
1085663   Bank St & Hudson St Subscriber 
1085664   Canal St & Rutgers St Subscriber 
1085665    10 Ave & W 28 St Subscriber 
1085666    9 Ave & W 16 St Subscriber 
1085667   Carlton Ave & Park Ave Customer 
1085668  Allen St & E Houston St Subscriber 
1085669  Allen St & E Houston St Subscriber 
1085670    8 Ave & W 31 St Subscriber 
1085671    9 Ave & W 14 St Subscriber 
1085672    E 25 St & 2 Ave Subscriber 
1085673    9 Ave & W 14 St Customer 
1085674    E 7 St & Avenue A Subscriber 
1085675  Allen St & Rivington St Subscriber 

Frage

Wie viele Kundenfahrten in einem Central Park Bike-Sharing-Station enden? Funktion a3() sollte ein Series-Objekt zurückgeben, das nach Stationsnamen in absteigender Reihenfolge der Popularität indiziert ist.

HINWEIS: Viele Sendernamen zeigen an, dass die Station an der Kreuzung von zwei Straßen befindet: E 17 St & Broadway oder Broadway & E 14 St. Ihre Antwort jede Endstation, dessen Namen Central Park enthalten sollte.

Mein Code:

def a3(rides): 
    df1 = rides[rides['User Type'] == 'Customer'] 
    df1 = rides['end station name'].str.contains('Central Park') 
    central_park_total_rides = df1.value_counts().head() 
    return central_park_total_rides 

print a3(rides) # where 'rides' is dataset 

Ausgang:

False 1070953 
True  14723 
Name: end station name, dtype: int64 

anstatt einer Reihe von Sendernamen, um decending.

Wo habe ich einen Fehler gemacht? Gibt es einen besseren Weg?

+0

'Fahrten [ 'Endstation name'] str.contains ('Central Park')' gibt Boolesche Werte –

+0

Mögliche Duplikat [So filtern Sie Zeilen, die ein Zeichenfolgenmuster aus einem Pandas-Datenrahmen enthalten] (https://stackoverflow.com/questions/27975069/how-to-filter-rows-containing-a-string-pattern-from-a-pandas-dataframe)) –

+0

Ich möchte Ausgabe ** Serienobjekt nach Stationsnamen in absteigender Reihenfolge der Popularität ** wie hier beschrieben. Wenn 'df1.str.contains()' nicht funktioniert, was sind die anderen Optionen? – RaThOd

Antwort

1

Dies ist der Wert zählt in absteigender Reihenfolge zurück:

df1 = rides[rides['User Type'] == 'Customer'] 
mask = df1['end station name'].str.contains('Central Park') 
df1.loc[mask, 'end station name'].value_counts() 

First off Sie Fahrten Bezug genommen wird, nicht df1, in Fahrten [ 'Endstation name'] str.contains ('Central Park')..

df1 ['end stations name']. Str.contains ('Central Park') gibt boolesche Werte zurück, so dass Sie diese als Maske auf dem df verwenden können. Dann verwendest du value_counts().

+0

enthalten. Vielen Dank – RaThOd

0

Besser ist Kette Bedingungen mit & (and) als Filter zweimal.

mask = rides[rides[('User Type'] == 'Customer') & 
      rides['end station name'].str.contains('Central Park')] 
rides.loc[mask, 'end station name'].value_counts()