2016-05-30 31 views
3

Ich habe zwei DataFrames mit verschiedenen Anzahlen von Zeilen und Spalten, die aber mindestens eine Spalte mit einigen gemeinsamen Informationen enthalten. Insbesondere ist StationCode immer ein LocationCode:Auswählen von Zeilen basierend auf Kriterien aus einem anderen Datenrahmen

dataframe1.head() 

    DistanceToPrev LineCode SeqNum StationCode   StationName RailTime 
0    0  RD  1   A15   Shady Grove   0 
1   14151  RD  2   A14    Rockville   4 
2   10586  RD  3   A13    Twinbrook   3 
3   5895  RD  4   A12   White Flint   3 
4   7309  RD  5   A11 Grosvenor-Strathmore   3 
5   11821  RD  6   A10  Medical Center   3 
6   5530  RD  7   A09    Bethesda   2 
7   9095  RD  8   A08 Friendship Heights   3 
8   4135  RD  9   A07   Tenleytown-AU   2 
9   5841  RD  10   A06   Van Ness-UDC   2 

dataframe2.head() 

    Car Destination DestinationCode DestinationName Group Line LocationCode    LocationName Min 
0  8 Glenmont    B11  Glenmont  1 RD   A01    Metro Center BRD 
28 8 Glenmont    B11  Glenmont  1 RD   B01  Gallery Pl-Chinatown ARR 
35 6 Glenmont    B11  Glenmont  1 RD   A14     Rockville 1 
45 8 Glenmont    B11  Glenmont  1 RD   B02   Judiciary Square 2 
62 6 Glenmont    B11  Glenmont  1 RD   B07      Takoma 3 
80 6 Glenmont    B11  Glenmont  1 RD   A13     Twinbrook 4 
82 8 Glenmont    B11  Glenmont  1 RD   B03    Union Station 4 
95 6 Glenmont    B11  Glenmont  1 RD   B08    Silver Spring 5 
114 8 Glenmont    B11  Glenmont  1 RD   B35    NoMa-Gallaudet 6 
129 6 Glenmont    B11  Glenmont  1 RD   A12     White Flint 7 
143 8 Glenmont    B11  Glenmont  1 RD   B04 Rhode Island Ave-Brentwood 8 

ich nur die Zeilen in dataframe2 deren Min Spalte einen Wert erhalten möchten weniger als RailTime Spalte in dataframe1 für die gleichenStationCode, dass die LocationCode übereinstimmt.

beispielsweise die Reihe 80 markiert in dataframe2 hat LocationCode A13 und Min 4. In dataframe1 StationCode A13 hat RailTime 4, so dass Reihe ex ausgeschlossen aus dataframe2 sein sollte.

Im Gegenteil, die Zeile 35 in dataframe2 markiert hat LocationCode A14 und einen Min Wert von 1, die für die A14 von dataframe1 kleiner als der RailTime Wert ist, so dass es in ausgeschlossen werden soll.

Antwort

1

einfache Lösung wäre:

df2 = df2.merge(df1[['StationCode', 'RailTime']], left_on='LocationCode', right_on='StationCode') 
df2 = df2[df2.Min<df2.RailTime] 
+0

Einfach, aber effektiv, Stefan. Es funktioniert perfekt. Ich würde wählen, aber noch nicht genug rep. Akzeptiert. – Keith

+0

Gern geschehen, froh, dass es geholfen hat. – Stefan

Verwandte Themen