Maison > développement back-end > Tutoriel Python > Comment joindre des DataFrames avec des plages date/heure qui se chevauchent à l'aide de l'indexation par intervalles ?

Comment joindre des DataFrames avec des plages date/heure qui se chevauchent à l'aide de l'indexation par intervalles ?

Barbara Streisand
Libérer: 2024-12-15 16:16:15
original
113 Les gens l'ont consulté

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

Joindre des trames de données avec des plages qui se chevauchent à l'aide de l'indexation par intervalles

Étant donné deux trames de données, df_1 et df_2, avec une colonne commune qui représente une plage date/heure, notre objectif est de les rejoindre en utilisant une condition spécifique : les valeurs de la colonne datetime de df_1 doivent se situer dans les plages spécifiées dans 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
Copier après la connexion

Solution :

Nous pouvons utiliser l'indexation par intervalles pour y parvenir. L'indexation par intervalles crée des groupes basés sur les plages spécifiées dans df_2 et attribue des étiquettes aux horodatages dans df_1 qui appartiennent à ces groupes.

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'])
Copier après la connexion

Sortie :

            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
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal