Ausgabe
Ich habe einen Pandas-Datenrahmen, der ungefähr so aussieht:
ICH WÜRDE | Kategorie | Datum |
---|---|---|
1 | EIN | 1.1.22 10:14:12 Uhr |
1 | EIN | 1.1.22 10:12:12 Uhr |
1 | B | 22.01.22 10:14:12 Uhr |
2 | EIN | 1.1.22 10:14:12 Uhr |
3 | EIN | 22.01.22 10:14:12 Uhr |
3 | B | 1.1.22 10:14:12 Uhr |
3 | B | 1.1.22 10:18:12 Uhr |
Was ich möchte, ist, nur die IDs zu erhalten, die Kategorie A und Kategorie B haben. Dann möchte ich die absolute (Wert-) Zeitdifferenz zwischen ihren jeweiligen zwei Daten (in Stunden) berechnen. Das ideale Ergebnis würde in etwa so aussehen:
ICH WÜRDE | Zeitunterschied |
---|---|
1 | 24 |
3 | 24 |
EDIT: Lassen Sie mich versuchen, ein paar Dinge klarzustellen. Für jede Kombination kann es eine doppelte ID/Kategorie geben. Beispielsweise können ID 1 und Kategorie A einige Male vorhanden sein. Der Datums-/Zeitstempel ist jedoch für diese Situationen unterschiedlich.
Lösung
Hier ist eine Möglichkeit, dies zu tun
# convert the date to datetime (unless its already datetime)
df['Date'] = pd.to_datetime(df['Date'])
# sort and drop duplicates, keeping latest
df=df.sort_values(['ID', 'Category','Date']).drop_duplicates(subset=['ID','Category','Date'], keep='last')
# pivot to put 'A' and 'B' as two columns
df2=df.pivot(index='ID', columns='Category', values='Date').reset_index()
# eliminate the rows where either of the two column (dates) are null
df2.dropna(inplace=True)
# this to get rid of spaces from Category, unless its already stripped of whitespaces characters
df2.columns = [col.strip() for col in df2.columns]
# calculate the difference
df2['time_difference']= df2['A'].sub(df2['B']).dt.total_seconds()/3600
df2
ID A B time_difference
0 1 2022-01-01 10:14:12 2022-01-02 10:14:12 -24.0
2 3 2022-01-02 10:14:12 2022-01-01 10:14:12 24.0
Beantwortet von – Naveed
Antwort geprüft von – Cary Denson (FixError Admin)