Heim >Backend-Entwicklung >Python-Tutorial >Wie verbinde ich DataFrames mit überlappenden Datums-/Uhrzeitbereichen mithilfe der Intervallindizierung?

Wie verbinde ich DataFrames mit überlappenden Datums-/Uhrzeitbereichen mithilfe der Intervallindizierung?

Barbara Streisand
Barbara StreisandOriginal
2024-12-15 16:16:15113Durchsuche

How to Join DataFrames with Overlapping Datetime Ranges Using Interval Indexing?

Datenrahmen mit überlappenden Bereichen mithilfe der Intervallindizierung verbinden

Gegeben sind zwei Datenrahmen, df_1 und df_2, mit einer gemeinsamen Spalte, die einen Datums-/Uhrzeitbereich darstellt. Unser Ziel ist es, sie mithilfe einer bestimmten Bedingung zu verbinden: Die Datetime-Spaltenwerte von df_1 müssen innerhalb der in angegebenen Bereiche liegen df_2.

df_1

  timestamp              A          B
0 2016-05-14 10:54:33    0.020228   0.026572
1 2016-05-14 10:54:34    0.057780   0.175499
2 2016-05-14 10:54:35    0.098808   0.620986
3 2016-05-14 10:54:36    0.158789   1.014819
4 2016-05-14 10:54:39    0.038129   2.384590


df_2

  start                end                  event    
0 2016-05-14 10:54:31  2016-05-14 10:54:33  E1
1 2016-05-14 10:54:34  2016-05-14 10:54:37  E2
2 2016-05-14 10:54:38  2016-05-14 10:54:42  E3

Lösung:

Wir können die Intervallindizierung verwenden, um dies zu erreichen. Durch die Intervallindizierung werden Bins basierend auf den in df_2 angegebenen Bereichen erstellt und den Zeitstempeln in df_1, die in diese Bins fallen, Beschriftungen zugewiesen.

import pandas as pd

# Convert start and end columns to IntervalIndex
df_2.index = pd.IntervalIndex.from_arrays(df_2['start'], df_2['end'], closed='both')

# Get the event associated with each timestamp in df_1
df_1['event'] = df_1['timestamp'].apply(lambda x: df_2.iloc[df_2.index.get_loc(x)]['event'])

Ausgabe:

            timestamp         A         B event
0 2016-05-14 10:54:33  0.020228  0.026572    E1
1 2016-05-14 10:54:34  0.057780  0.175499    E2
2 2016-05-14 10:54:35  0.098808  0.620986    E2
3 2016-05-14 10:54:36  0.158789  1.014819    E2
4 2016-05-14 10:54:39  0.038129  2.384590    E3

Das obige ist der detaillierte Inhalt vonWie verbinde ich DataFrames mit überlappenden Datums-/Uhrzeitbereichen mithilfe der Intervallindizierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn