如何比较date从Excel工作表上的值填写python的目的

我有一个2张工作表的Excel文件。

一张包含数据的表格:

DATE TMAX TMIN 20110706 317 211 20110707 322 211 20110708 317 211 20110709 322 211 20110710 328 222 20110711 333 244 20110712 356 250 20110713 356 222 

另一张纸包括:

 Start Date End Date Rep Month Cost kWh kW 7/6/2011 8/3/2011 July 5,065.17 76,640 205 8/3/2011 9/7/2011 August 5,572.38 86,640 195 

我的目标是根据第一张纸上的date是否落在一定的千瓦时范围内,在第二张上写下另一列(千瓦时)。

举一个例子:

 DATE TMAX TMIN kWh 20110706 317 211 76640 20110707 322 211 76640 20110708 317 211 76640 20110709 322 211 76640 20110710 328 222 76640 20110711 333 244 76640 20110712 356 250 76640 20110713 356 222 76640 20110801 344 228 76640 20110802 356 200 76640 20110803 367 200 86640 20110804 361 228 86640 

我很难搞清楚如何做一种algorithmparsing来实现我想要做的事情。

我已经很熟悉如何写入文件读pandas一个文件/单元格。

这是我的代码:

 import pandas as pd from pandas import ExcelWriter df = pd.read_excel("thecddhddtest.xlsx",'Sheet1') df2 = pd.read_excel("thecddhddtest.xlsx",'Sheet2') df.head() df["DATE"] = pd.to_datetime(df["DATE"], format="%Y%m%d") pd.to_datetime(df2["Start Date"], format="%m/%d/%Y") df3 = df2.set_index("Start Date") df3["kWh"].reindex(df["DATE"], method="ffill") df["kWh"] = df3["kWh"].reindex(df["DATE"], method="ffill") print(df["kWh"]) writer = ExcelWriter('thecddhddtestkWh.xlsx') df.to_excel(writer,'Sheet1',index=False) df2.to_excel(writer,'Sheet2',index=False) writer.save() 

这导致:

 DATE TMAX TMIN kWh 20110706 317 211 20110707 322 211 20110708 317 211 20110709 322 211 20110710 328 222 20110711 333 244 20110712 356 250 20110713 356 222 

由于某种原因,kWh电池是空的

将date列parsing为pandas Timestamps / numpy datetime64是至关重要的。 最好的方法是使用to_datetime格式。

  In [11]: df Out[11]: DATE TMAX TMIN 0 20110706 317 211 1 20110707 322 211 2 20110708 317 211 3 20110709 322 211 4 20110710 328 222 5 20110711 333 244 6 20110712 356 250 7 20110713 356 222 8 20110801 344 228 9 20110802 356 200 10 20110803 367 200 11 20110804 361 228 In [12]: df["DATE"] = pd.to_datetime(df["DATE"], format="%Y%m%d") In [13]: df Out[13]: DATE TMAX TMIN 0 2011-07-06 317 211 1 2011-07-07 322 211 2 2011-07-08 317 211 3 2011-07-09 322 211 4 2011-07-10 328 222 5 2011-07-11 333 244 6 2011-07-12 356 250 7 2011-07-13 356 222 8 2011-08-01 344 228 9 2011-08-02 356 200 10 2011-08-03 367 200 11 2011-08-04 361 228 

同样(使用不同的格式):

 In [14]: pd.to_datetime(df2["Start Date"], format="%m/%d/%Y") Out[14]: 0 2011-07-06 1 2011-08-03 Name: Start Date, dtype: datetime64[ns] 

现在,第一个观察是,如果时期不相互排斥,这是没有意义的。 这意味着我们只需要考虑开始date*。

这意味着你可以重新编制秒表,向前填充,你就完成了:

 In [21]: df3 = df2.set_index("Start Date") In [22]: df3 Out[22]: End Date Rep Month Cost kWh kW Start Date 2011-07-06 8/3/2011 July 5,065.17 76,640 205 2011-08-03 9/7/2011 August 5,572.38 86,640 195 

这使您可以通过DataFrame中的date重新索引:

 In [23]: df3["kWh"].reindex(df["DATE"], method="ffill") Out[23]: DATE 2011-07-06 76,640 2011-07-07 76,640 2011-07-08 76,640 2011-07-09 76,640 2011-07-10 76,640 2011-07-11 76,640 2011-07-12 76,640 2011-07-13 76,640 2011-08-01 76,640 2011-08-02 76,640 2011-08-03 86,640 2011-08-04 86,640 Name: kWh, dtype: object 

并将其设置为df中的列。

 In [24]: df["kWh"] = df3["kWh"].reindex(df["DATE"], method="ffill") 

*如果有一些“空”的时期,我们可以添加一些NaN行,相应的“空”开始date。