Fehlende Termine nach Gruppen in Pandas füllen

Ich muss das fehlende Datum nach Gruppe füllen. Hier ist der Code zum Erstellen des Datenrahmens. Ich möchte das Datum der Füllspalte nur so weit hinzufügen, wie es das Datum der Füllspalte ändert und erst, wenn sich die Gruppe 'name' ändert.

data = {'tdate': [20080815,20080915,20081226,20090110,20090131,20080807,20080831, 20080918,20081023,20081114,20081207,20090117,20090203,20090219,20090305,20090318,20090501], 'name': ['A','A','A','A','A','B','B','B','B','B','B','B','B','B','B','B','B'], 'fill': [NaN,NaN,20080915,NaN,NaN,NaN,NaN,NaN,NaN,20081023, NaN,NaN,NaN,NaN,20090219,NaN,NaN]} df = pd.DataFrame(data, columns=['tdate', 'name', 'fill']) df 

Aktueller Datenrahmen

 tdate name fill 0 20080815 A NaN 1 20080915 A NaN 2 20081226 A 20080915 3 20090110 A NaN 4 20090131 A NaN 5 20080807 B NaN 6 20080831 B NaN 7 20080918 B NaN 8 20081023 B NaN 9 20081114 B 20081023 10 20081207 B NaN 11 20090117 B NaN 12 20090203 B NaN 13 20090219 B NaN 14 20090305 B 20090219 15 20090318 B NaN 16 20090501 B NaN 

Gewünschter Ausgang

  tdate name fill 0 20080815 A NaN 1 20080915 A NaN 2 20081226 A 20080915 3 20090110 A 20080915 4 20090131 A 20080915 5 20080807 B NaN 6 20080831 B NaN 7 20080918 B NaN 8 20081023 B NaN 9 20081114 B NaN 10 20081207 B 20081023 11 20090117 B 20081023 12 20090203 B 20081023 13 20090219 B 20081023 14 20090305 B 20081023 15 20090318 B 20090219 16 20090501 B 20090219 

Hier ist mein Code

 df.groupby(df["name"])["fill"].fill() 

  • Fügen Sie indizierte Spalte zu DataFrame mit Pandas hinzu
  • Pandas verwenden
  • Pandas: Mehrere Funktionen in einer Gruppe verwenden
  • Pandas read_csv Spalte dtype ist auf dezimal gesetzt, aber konvertiert in String
  • Anwenden der kumulativen Mittelfunktion auf ein gruppiertes Objekt
  • Setzen Sie Pandas-Diagramm in eine Excel-Datei mit XlsxWriter ein
  • One Solution collect form web for “Fehlende Termine nach Gruppen in Pandas füllen”

    Du warst ziemlich nah, du musst einfach nur weiterfüllen, anstatt nur zu füllen:

     df.groupby('name')["fill"].ffill() Out[42]: 0 NaN 1 NaN 2 20080915 3 20080915 4 20080915 5 NaN 6 NaN 7 NaN 8 NaN 9 20081023 10 20081023 11 20081023 12 20081023 13 20081023 14 20090219 15 20090219 16 20090219 dtype: float64 

    Oder gleichwertig:

     df.groupby('name')["fill"].fillna(method='ffill') 
    Python ist die beste Programmiersprache der Welt.