2017-04-06 55 views
1

Wenn ein Problem mit Pandas df, versucht, die "Count" -Spalte basierend auf dem Datum zu erhalten, sollte der Code nach dem "Datumsbereich" in der Datumsspalte suchen, und wenn es vorhanden ist der 'Count' sollte in die Spalte "Posts" für das entsprechende Datum kopiert werden zB: date_range value = 16/02/2017 - code sucht für 16/02/2017 in "Dates" spalte und macht "Posts" gleich der "Count" Wert dieses Datum - wenn der date_range Wert nicht erscheint - Beiträge sollten = 0.Python SVERWEIS basierend auf Daten - Pandas

Daten Beispiel:

Dates  Count date_range Posts 
0 07/02/2017 1 16/12/2016 (should = 5) 
1 01/03/2017 1 17/12/2016 
2 15/02/2017 1 18/12/2016 
3 23/01/2017 1 19/12/2016 
4 28/02/2017 1 20/12/2016 
5 09/02/2017 2 21/12/2016 
6 20/03/2017 2 22/12/2016 
7 16/12/2016 5 

Mein Code sieht wie folgt aus:

DateList = df['Dates'].tolist() 

    for date in df['date_range']: 
     if str(date) in DateList: 
      df['Posts'] = df['Count'] 
     else: 
      dates_df['Posts'] = 0 

jedoch macht dies die Daten die falschen Werte abbilden zu „Beiträge“

Hoffentlich ich das richtig erklärt! Vielen Dank im Voraus für die Hilfe!

Antwort

1

Sie können zunächst dict für passende Werte schaffen und dann map durch date_range Säule:

print (df) 
     Dates Count date_range 
0 07/02/2017  1 16/12/2016 
1 01/03/2017  1 17/12/2016 
2 15/02/2017  1 18/12/2016 
3 23/01/2017  1 19/12/2016 
4 28/02/2017  1 07/02/2017 <-change value for match 
5 09/02/2017  2 21/12/2016 
6 20/03/2017  2 22/12/2016 
7 16/12/2016  5 22/12/2016 

d = df[df['Dates'].isin(df.date_range)].set_index('Dates')['Count'].to_dict() 
print (d) 
{'16/12/2016': 5, '07/02/2017': 1} 

df['Posts'] = df['date_range'].map(d).fillna(0).astype(int) 
print (df) 
     Dates Count date_range Posts 
0 07/02/2017  1 16/12/2016  5 
1 01/03/2017  1 17/12/2016  0 
2 15/02/2017  1 18/12/2016  0 
3 23/01/2017  1 19/12/2016  0 
4 28/02/2017  1 07/02/2017  1 
5 09/02/2017  2 21/12/2016  0 
6 20/03/2017  2 22/12/2016  0 
7 16/12/2016  5 22/12/2016  0 
+0

Vielen Dank für diese, wenn dies scheint jedoch das Wörterbuch läuft d leer zu sein, obwohl es offensichtliche Übereinstimmungen über die 2 Spalten sein – J3319

+0

Leer? Es bedeutet, dass es keine Übereinstimmung gibt? – jezrael

+0

Genau, aber nicht sicher, warum es die Übereinstimmungen nicht sehen kann, da es einige gibt, die ich beim Drucken sehen kann df – J3319

Verwandte Themen