主要思想是将您的日期/时间列转换为datetime 对象,然后使用这些对象进行日期过滤。我以为它们是字符串开始的。
我不确定您的日期是如何传入的,但希望您能弄清楚如何从中创建datetime 对象。如果没有,请告诉我,我们可以更新。下面是一个示例,说明如何按日期过滤并将开始/结束日期的值相加:
import numpy as np
import pandas as pd
import datetime
cols = ["Date", "Time", "Value"]
rows = [["29-Jan-18", "11:00", 10],
["29-Jan-18", "12:00", 11],
["29-Jan-18", "13:00", 12],
["29-Jan-18", "14:00", 13],
["31-Jan-18", "11:00", 90],
["31-Jan-18", "12:00", 91],
["31-Jan-18", "13:00", 92],
["31-Jan-18", "14:00", 93]]
df = pd.DataFrame(rows, columns=cols)
df['datetime_str'] = df['Date'].str.cat(df['Time'].astype(str), sep=" ")
df['datetime'] = df['datetime_str'].apply(lambda d: datetime.datetime.strptime(d, '%d-%b-%y %H:%M'))
print(df)
print()
# Hopefully you can figure out how to beat incoming start/end date into datetime.
# If not, let me know how the start/end are coming in and we can write a function to do it
start_date = datetime.datetime.strptime("29-Jan-18 11:00", '%d-%b-%y %H:%M')
end_date = datetime.datetime.strptime("29-Jan-18 13:00", '%d-%b-%y %H:%M')
value_sum = df[ (df['datetime'] >= start_date) & (df['datetime'] <= end_date) ]['Value'].sum()
print("Value sum from " + str(start_date) + " to " + str(end_date) + ": ", value_sum)
# Works accross days as well
start_date = datetime.datetime.strptime("29-Jan-18 13:00", '%d-%b-%y %H:%M')
end_date = datetime.datetime.strptime("31-Jan-18 13:00", '%d-%b-%y %H:%M')
value_sum = df[ (df['datetime'] >= start_date) & (df['datetime'] <= end_date) ]['Value'].sum()
print("Value sum from " + str(start_date) + " to " + str(end_date) + ": ", value_sum)
这个输出:
Date Time Value datetime_str datetime
0 29-Jan-18 11:00 10 29-Jan-18 11:00 2018-01-29 11:00:00
1 29-Jan-18 12:00 11 29-Jan-18 12:00 2018-01-29 12:00:00
2 29-Jan-18 13:00 12 29-Jan-18 13:00 2018-01-29 13:00:00
3 29-Jan-18 14:00 13 29-Jan-18 14:00 2018-01-29 14:00:00
4 31-Jan-18 11:00 90 31-Jan-18 11:00 2018-01-31 11:00:00
5 31-Jan-18 12:00 91 31-Jan-18 12:00 2018-01-31 12:00:00
6 31-Jan-18 13:00 92 31-Jan-18 13:00 2018-01-31 13:00:00
7 31-Jan-18 14:00 93 31-Jan-18 14:00 2018-01-31 14:00:00
Value sum from 2018-01-29 11:00:00 to 2018-01-29 13:00:00: 33
Value sum from 2018-01-29 13:00:00 to 2018-01-31 13:00:00: 298