Имеет 750k строк df
с 15 столбцами и pd.Timestamp
как index
, называемое ts
. Я обрабатываю данные в реальном времени с точностью до миллисекунд почти в реальном времени.
Теперь я хотел бы применить некоторые статистические данные, полученные из более высокого временного разрешения в df_stats
, в качестве новых столбцов к большому df
. df_stats
имеет временное разрешение 1 минуту.
$ df
+----------------+---+---------+
| ts | A | new_col |
+----------------+---+---------+
| 11:33:11.31234 | 1 | 81 |
+----------------+---+---------+
| 11:33:11.64257 | 2 | 81 |
+----------------+---+---------+
| 11:34:10.12345 | 3 | 60 |
+----------------+---+---------+
$ df_stats
+----------------+----------------+
| ts | new_col_source |
+----------------+----------------+
| 11:33:00.00000 | 81 |
+----------------+----------------+
| 11:34:00.00000 | 60 |
+----------------+----------------+
В настоящее время у меня есть код ниже, но он неэффективен, потому что он необходим для перебора всех данных.
Мне интересно, не может ли быть более простого решения используя pd.cut
, bin
или pd.Grouper
? Или что-то еще, чтобы объединить временные рамки по двум индексам?
df_stats['ts_timeonly'] = df.index.map(lambda x: x.replace(second=0, microsecond=0))
df['ts_timeonly'] = df.index.map(lambda x: x.replace(second=0, microsecond=0))
df = df.merge(df_stats, on='ts_timeonly', how='left', sort=True, suffixes=['', '_hist']).set_index('ts')