Как сравнить даты с листами Excel для целей наполнения значений на python

У меня есть файл Excel с 2 листами.

один лист, содержащий данные:

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 

Моя цель состоит в том, чтобы написать другой столбец на листе 1 (kwh) из второго листа в зависимости от того, попадает ли дата на лист один в пределах определенного кВтч.

Для примера:

 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 

Мне трудно понять, как сделать своего рода алгоритмический синтаксический анализ, чтобы реализовать то, что я пытаюсь сделать.

Я уже знаком с тем, как писать в файл, читать файл / ячейки с помощью 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 

КВтч-ячейка по какой-то причине пуста

Крайне важно проанализировать столбцы даты как 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] 

Теперь первое замечание состоит в том, что это не имело бы смысла, если бы периоды не были взаимоисключающими. Это означает, что нам нужно только рассмотреть дату начала *.

Это означает, что вы можете повторно проиндексировать лист секунд, переслать заполнение, и все готово:

 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:

 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 с соответствующей «пустой» датой начала.

  • Python Pandas read_excel различное поведение при разборе данных MultiIndex между Pandas 0.18.1 и Pandas> 0.19
  • Как импортировать все поля из xls в виде строк в фреймворк Pandas?
  • Разбор Excel с Python Pandas 0.18 => 23,999 (в европейском стиле) анализируется как 23999
  • Добавить лист в существующий файл Excel с помощью pandas
  • ImportError при использовании read_excel в кадре данных
  • Объединение двух столбцов со связанными данными в один столбец (python, pandas)
  • Как сохранить ссылки Excel в формулах на листах, где рабочий лист пуст?
  • Использование Pandas для построения 2D-таблицы на основе COUNTIF () отдельного листа excel
  • Письмо, чтобы преуспеть с пандами
  • Как применить сложную формулу с помощью Pandas в Python?
  • python - экспорт мультииндексной базы данных pandas в excel
  • Interesting Posts

    Получение индекса за пределами исключения, если ячейка пуста в Excel

    perl для чтения файла xlsx (который имеет много листов), используя имя листа

    Сортировка по дате в Excel при импорте из служб Reporting Services

    Как отделить поля CSV в Excel, чтобы они были в отдельных блоках

    Создание SQL-соединения в Excel, которое создает и удаляет временные таблицы

    Экспорт справа налево от RadGridView

    Как подождать, пока Excel не вычислит формулы, прежде чем продолжить с win32com

    Userform на листе excel исчезает, когда на листе excel есть элементы управления ActiveX! Зачем

    Excel Calculations и VBA

    Формулы не обновляются, если другая рабочая книга закрыта

    Сообщение Excel во время кода (C #)

    Отображение значения, если оно соответствует критериям – Excel

    Скопировать вставку Excel Поддерживаемые файлы из одной папки в один Excel

    Объедините четыре таблицы из MySQL и покажите только строки, которые удовлетворяют условию в Excel

    VBA, чтобы найти цвет шрифта строки

    Давайте будем гением компьютера.