2017-12-14 4 views
-1

UPDATE: Fehler -> "kann nicht mit einem nicht eindeutigen Multiindex umgehen!"Python-Datenframe: Berechne die Anzahl der Tage seit dem letzten Datum in der vorherigen Zeile und in der neuen Spalte

Nach den Code ausgeführt wird, erhalte ich die folgende Ausgabe Datenrahmen in Python:

df = df_EVENT5_18[['FLEET', 'SUBFLEET', 'AIRCRAFT', 'DTIN']] 

df = df.sort_values(['FLEET', 'SUBFLEET', 'AIRCRAFT', 'DTIN']) 

df.set_index(['FLEET', 'SUBFLEET', 'AIRCRAFT'], inplace=True) 

# df = df.reset_index() 
df['DTIN'] = pd.to_datetime(df['DTIN']) 

enter image description here

Aber es Fehler in der allerletzten Zeile Code aus:

df_EVENT5_19 = df.assign(output = df.groupby(['FLEET', 'SUBFLEET', 'AIRCRAFT']).DTIN.apply(lambda x: x.diff())) 

Dies ist der Fehler: "Kann nicht mit einem nicht eindeutigen Multiindex umgehen!"


Nachfolgend finden Sie eine Beispieltabelle, die mit denen ich arbeite:

enter image description here

Die Spalten UI_A, UI_B und UI_C zusammen eine eindeutige Kennung genommen.

Ich möchte für jede Zeile und für jede eindeutige Kennung die Anzahl der Tage seit dem letzten Datum berechnen. Wenn Ihre eindeutige ID identisch ist, müssen Sie das Datum in einer Zeile über Ihnen referenzieren.

Diese Logik ist ein wenig schwierig in Worten zu erklären, also schließe ich meine gewünschte Ausgabetabelle unten ein. Ich möchte die Spalte "Tage seit vorherigem Datum"

enter image description here

Antwort

1

erstellen Wenn Sie Pandas verwenden, können Sie verwenden, zuweisen und dann groupby

import pandas as pd 
data = { 
    'UI_A':['319','319','319','319','319','319','319','319','319','319'], 
    'UI_B': ['131','131','131','131','131','131','131','131','131','131'], 
    'UI_C': ['00319','00319','00319','04001','04001','04001','04002','04002','04002','04002'], 
    'DATE' : ['2012-12-30','2013-02-05','2013-02-11','2009-10-25','2010-09-08','2011-01-16','2009-12-02','2010-09-27','2011-01-06','2011-02-09'] 
} 

df = pd.DataFrame(data) 
df.set_index(['UI_A','UI_B','UI_C'],inplace=True) 
df['DATE'] = pd.to_datetime(df['DATE']) 
df = df.assign(output=df.groupby(['UI_A','UI_B','UI_C']).DATE.apply(lambda x: x.diff())) 

Out:

     DATE output 
UI_A UI_B UI_C      
319 131 00319 2012-12-30  NaT 
      00319 2013-02-05 37 days 
      00319 2013-02-11 6 days 
      04001 2009-10-25  NaT 
      04001 2010-09-08 318 days 
      04001 2011-01-16 130 days 
      04002 2009-12-02  NaT 
      04002 2010-09-27 299 days 
      04002 2011-01-06 101 days 
      04002 2011-02-09 34 days 
+0

Gute Antwort! +1 Ich denke, Sie könnten 'as_index = False' in Ihrer Gruppe hinzufügen, um Ihren ursprünglichen Datenrahmen ohne Indizierung zurück zu bekommen. –

+0

Ich erhalte den folgenden Fehler, wenn ich Ihren Code gegen meine tatsächlichen Daten ausprobierte: "Kann nicht mit einem nicht eindeutigen Multiindex umgehen" – PineNuts0

Verwandte Themen