У меня есть два кадра данных с временными данными. Я хочу выбрать все значения, в которых оба фрейма имеют временную метку с разницей меньше определенного порога.Слияние без столбца в Pandas
Например, dataframes 1 и 2 вид, как это, за исключением разных, непредсказуемых значений тактовой частоты:
clock head px py pz qw
0 0.000000 -0.316579 0.119198 0.149585 0.271688 0.987492 -0.002514
1 0.200000 -0.316642 0.119212 0.149593 0.271678 0.987487 -0.002522
2 1.200000 -0.316546 0.119199 0.149585 0.271669 0.987495 -0.002507
clock head px py pz qw
0 0.010000 -0.316579 0.119198 0.149585 0.271688 0.987492 -0.002514
1 1.1040000 -0.316642 0.119212 0.149593 0.271678 0.987487 -0.002522
2 2.4030000 -0.316546 0.119199 0.149585 0.271669 0.987495 -0.002507
В результате dataframe выглядит при условии, порог 0,1:
clock head1 head2 px1 px2 ...
0 0.000000 -0.316579 -0.316579 0.119198 0.119198 ...
1 1.200000 -0.316546 -0.316642 0.119199 0.119212 ...
Мой текущий методология: создать идентичный столбец «наполнитель» в обоих кадрах данных, объединить в этот столбец (создавая информационный фрейм длиной len (dataframe1) * len (dataframe2)), а затем фильтровать по столбцам, которые я хочу:
#rename the dataframe keys so that they are different
dataframe1.columns = [i+str(1) for i in dataframe1.columns.values]
dataframe1['filler'] = 0
dataframe2.columns = [i+str(2) for i in dataframe2.columns.values]
dataframe2['filler'] = 0
# merge requires a column to merge on, so merge on the filler
df_merged = dataframe1.merge(dataframe2,on='filler',how='left')
#pick out only the rows with the time differences within the threshold
mask = (df_merged[keyword+str(1)]<= df_merged[keyword+str(2)]+threshold) & (df_merged[keyword+str(1)]> df_merged[keyword+str(2)]-threshold)
df_merged = df_merged[mask]
#delete the filler column
del df_merged['filler']
#reindex the dataframe
df_merged.index = arange(0, len(df_merged))
Это очень быстро и дает мне результат, который я хочу, однако, глупо создавать столбец «filler», который я должен удалить. Мне интересно, было ли более очевидное решение, которое я пропустил.
Слияние с столбцом «keyword» не дает мне то, что я хочу, это создает только данные с полными данными, только если время точно такое же, без порога по разнице во времени.
Пожалуйста, добавьте небольшой пример того, что данные, которые вы имеете, и как ты хотите, чтобы он смотрел потом. – firelynx
Я добавил несколько образцов данных (с теми же данными, реальные данные имеют разные значения) –
Похоже на имена столбцов '' head1 "', а '' head2 "' является проблемой. Возможно, если вы сообщите нам, что вы хотите делать с колонками впоследствии, вам будет легче дать вам лучшее решение. У меня есть чувство, что вы действительно хотите согласовать данные, а затем свести их к твердым вторым наблюдениям. – firelynx