我有一个数据框,其中的日期索引由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]


这看起来像数据框,可能是因为date列的数量太慢,所以代码太慢了:

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分钟的时间...

先感谢您,

最佳答案

嗯,我知道了,这样做我根本没有利用向量计算...但是我看不到其他方式。

我的数据框如下所示(一年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”一个日期(D-1周)
这里的输出是从08/01/2019开始每行的功耗变化和温度变化。

然后,我将Delta_Consumption与Delta_temperature相乘,并将Delta_temperature与Delta_temperature相乘。

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_conso”存储在两个列表中。目标实际上是基本上进行线性回归。

然后我将prodtemp_conso除以prodtemp,然后对每个相同的半小时周期求和。

但是我上面提到的代码部分是使一切变慢的部分。

关于python - DataFrame非常慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55819836/

10-14 18:30