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() 

  • Hinzufügen / Einfügen von Werten in pandas dataframe basierend auf 1 oder mehr Spalten
  • Wie summiere ich Werte in einer Spalte, die mit einer bestimmten Bedingung über Pandas übereinstimmen?
  • Vergleich von Pandas Dataframe Zeilen und Zeilen mit überlappenden Daten
  • Konservierung der Spaltenreihenfolge in Python Pandas DataFrame
  • Erstellen eines Multiline-Graphen mit Vincent
  • Pandas-Stil Transformation von gruppierten Daten auf pyspark DataFrame
  • 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.