Например, давайте посмотрим на два кадра данных, аналогичные тем, которые вы опубликовали, но с одним назначением данных, смещенным на несколько секунд (я возьму это в качестве примера «незначительного отклонения»).
import pandas as pd
df1 = pd.DataFrame(
data= [('11:05',90),
('11:05', 92),
('11:05', 93),
('11:06', 90)],
columns = ('Time', 'Sensor1'))
df2 = pd.DataFrame(
data= [('11:05',93),
('11:05:03', 95),
('11:06', 93),
('11:07', 92)],
columns = ('Time', 'Sensor2'))
Прежде всего, мы изменим столбец «Время» из текстового формата в формат pd.Timestamp
:
df1['Time'] = df1['Time'].apply(pd.Timestamp)
df2['Time'] = df2['Time'].apply(pd.Timestamp)
Это добавит текущую датусегодня как дата, но это не важно для этого примера.
Чтобы справиться с «незначительными отклонениями», мы можем .resample
временной ряд, чтобы выровнять его с временным разрешениемодной минуты (если мы хотим другое разрешение, мы смотрим документы .resample)
df1 = df1.set_index('Time').resample('1T').mean() # mean - just for example; can also be median or some other function
df2 = df2.set_index('Time').resample('1T').mean()
Наконец, мы .join
два кадра данных на основе их индекса (что мыустановить время), сохраняя только пересечение в
df1.join(df2, how='inner')
И все!