[FIXED] Finden Sie alle IDs, die beide Kategorien haben, und berechnen Sie den Zeitunterschied

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)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like

[FIXED] Python-Pandas-Web-Scraping

Ausgabe Ich versuche, eine Liste von Tabellen auf dieser Seite in einen Pandas DataFrame umzuwandeln: https://intermediaries.hsbc.co.uk/products/product-finder/ Ich möchte…