【发布时间】:2021-11-07 20:27:12
【问题描述】:
我有两个庞大的日期时间索引和排序数据框,我需要将一个组与另一个组进行比较。
start, end = df.index.min(), df.index.max()
for day in pd.date_range(start.date(), end.date()+a_day, freq='D'):
current_df = df[df.index.date == day.date()]
current_df2= df2[df2.index.date == day.date()]
do_heavy_lift(df, df2)
我认为繁重的工作会花费大部分时间,但按日期切片需要 > 95% 的时间。
经过反思,每次我对数据帧进行切片时,它可能都会遍历整个索引。
有什么方法可以显着改进这种方法吗?索引已排序。我可以:
- 告诉它在当天结束后停止搜索?
- 还记得前一天结束时它在哪里,并从那里开始第二天吗?
您可以使用以下方法创建示例数据集:
import numpy as np
from datetime import datetime, timedelta
date_today = datetime.now()
days = pd.date_range(date_today, date_today + timedelta(7000), freq='H')
np.random.seed(seed=1111)
data = np.random.randint(1, high=100, size=len(days))
df = pd.DataFrame({'test': days, 'col2': data})
df = df.set_index('test')
np.random.seed(seed=1345)
data = np.random.randint(1, high=100, size=len(days))
df2 = pd.DataFrame({'test': days, 'col2': data})
df2 = df2.set_index('test')
df.sort_index(inplace=True)
df2.sort_index(inplace=True)
CPU时间:用户9分50秒,系统:4.27秒,总计:9分54秒 挂墙时间:10分45秒
【问题讨论】:
标签: python pandas dataframe python-datetime