数据帧非常复杂

2024-06-26 01:42:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,其中包含17000多行的日期索引。 对于每一行,我都将功耗、温度和日期作为数据帧的索引。还有其他4列,其中有各种格式的日期。你知道吗

对于每行,如果日期>;=08/01/2019,我将执行以下操作:

消费(日期)=消费(日期)-消费(日期-1周)

温度(日期)=温度(日期)-温度(日期-1周)

但是速度非常慢(比如4分钟…)

结果是好的,但我不能设法加快进程。你知道吗

在我开始使用python时,我想知道这种方法是否正确? 也许事实上,有4列我不在这里使用这个计算减慢过程?你知道吗

下面是代码的一部分,使用我上面描述的数据帧需要花费大量时间。你知道吗

for index, row in df.iterrows():

    if index >= datetime(year,1,8,0,0):
       date_start_j_wb = index - timedelta(days=7)

       conso_j = df[df.index == index]["conso"].values
       conso_j_wb = df[df.index == date_start_j_wb]["conso"].values
       temp_j = df[df.index == index]["temp"].values
       temp_j_wb = df[df.index == date_start_j_wb]["temp"].values
       s_dconso = conso_j[0] - conso_j_wb[0]
       s_dtemp =  temp_j[0] - temp_j_wb[0]

下面是看起来像数据帧的内容,因为可能是因为日期列的数量,所以代码非常慢:

df["start_date"] = start_date
df["start_hour"]= start_hour
df["end_hour"] = end_hour
df["start_date_hour"] = start_date_hour
df["start_date_hour_str"] = start_date_hour_str
df["end_date_hour_str"] = end_date_hour_str
df["end_date_hour"] = end_date_hour
df["end_hour"] = end_hour
df["conso"] = conso
df["temp"] = temp

你能给我一些建议来加速这个代码吗。 有了这么多的数据,我想不会超过1分钟。。。你知道吗

先谢谢你


Tags: 数据代码dfdateindex温度starttemp
2条回答

嗯,好吧,我明白了,这样做我根本没有利用向量计算…但我看不到其他的方式。你知道吗

我的数据框是这样的(一年30分钟的步长):

                 start_date start_hour  ...  conso      temp
  start_date_hour                             ...                 
  2019-01-01 00:00:00  2019-01-01      00:00  ...  0.057  5.684032
  2019-01-01 00:30:00  2019-01-01      00:30  ...  0.057  5.663681
  2019-01-01 01:00:00  2019-01-01      01:00  ...  0.057  5.655579
  2019-01-01 01:30:00  2019-01-01      01:30  ...  0.056  5.655822
  2019-01-01 02:00:00  2019-01-01      02:00  ...  0.057  5.664895
  2019-01-01 02:30:00  2019-01-01      02:30  ...  0.057  5.654780
  .....

如前所述,对于每一行,我检查索引是否优于或等于2019-01-08,如果是这样,我查看一周前的“conso”和“temp”,然后计算日期“D”的“conso”减去日期“conso”a和日期(D-1week)之间的差值 这里的输出是2019年1月8日起每行的消耗变化和温度变化。你知道吗

然后我将消耗量与温度相乘,温度与温度相乘。你知道吗

for index, row in df.iterrows():


    if index >= datetime(year,1,8,0,0):
       date_start_j_wb = index - timedelta(days=7)

       conso_j = df[df.index == index]["conso"].values
       conso_j_wb = df[df.index == date_start_j_wb]["conso"].values
       temp_j = df[df.index == index]["temp"].values
       temp_j_wb = df[df.index == date_start_j_wb]["temp"].values

       s_dconso = conso_j[0] - conso_j_wb[0]
       s_dtemp =  temp_j[0] - temp_j_wb[0]

       prodtemp = s_dtemp*s_dtemp
       prodtemp_conso = s_dtemp*s_dconso

然后我将结果“prodtemp”和“prodtemp\u conso”存储在两个列表中。我们的目标实际上是做一个基本的线性回归。你知道吗

然后我用prodtemp除以prodtemp,再加上每半个小时。你知道吗

但是我上面提到的那部分代码,是减慢一切的那部分。。你知道吗

我找到了另一个解决方案,工作更快,但一点也不优雅。你知道吗

我创建了5个列表:一个在第一个小时更改之前,一个在小时更改的当天,一个在小时更改的第一天之后和第二天之前,另一个在小时更改的第二天和最后一个之后。。。你知道吗

然后我为第一个小时的列表添加了两个值,为第二个小时的列表删除了两个值更改为结果我有48个元素。你知道吗

我连接了5个列表,并创建了两个列表:一个从开始到结束移动48*7。操作简单。你知道吗

从时间的变化来看是错误的,但这两个步骤对我来说并不重要。你知道吗

但它不是很干净。。。。你有什么建议吗?你知道吗

相关问题 更多 >