第一数据帧(df
):
start | end |
---|---|
6:15:00 | 6:15:06 |
6:15:00 | 6:15:00 |
6:15:00 | 6:15:01 |
6:15:01 | 6:15:06 |
6:15:01 | 6:15:15 |
6:15:01 | 6:15:09 |
6:15:01 | 6:15:09 |
6:15:02 | 6:15:06 |
6:15:02 | 6:15:08 |
6:15:02 | 6:15:09 |
df2
:
periods (1 sec timedelta) | total |
---|---|
6:15:00 | 2 |
6:15:01 | 5 |
6:15:02 | 8 |
如何在不使用循环的情况下计算df2
的总和?对于df2
个周期中的每个周期,需要从df
开始的行的和,前提是start <= period
和end >= period (total)
.例如,df2 = x
中的6:15:02
:
from datetime import datetime, timedelta
x = datetime(year=2023,month=10, day=6, hour=6, minute=15, second=2).time()
df = pd.DataFrame({'start': ['6:15:00', '6:15:00', '6:15:00', '6:15:01', '6:15:01', '6:15:01', '6:15:01', '6:15:02', '6:15:02', '6:15:02'],
'end': ['6:15:06', '6:15:00', '6:15:01', '6:15:06', '6:15:15', '6:15:09', '6:15:09', '6:15:06', '6:15:08', '6:15:09']})
df['start'] = pd.to_datetime(df['start'], yearfirst=True).dt.time
df['end'] = pd.to_datetime(df['end'], yearfirst=True).dt.time
start = datetime(year=2023,month=10, day=6, hour=6, minute=15, second=0)
end = datetime(year=2023,month=10, day=6, hour=6, minute=15, second=2)
df2 = pd.DataFrame({"periods (1 sec timedelta)": pd.date_range(start=start, end=end, freq=timedelta(seconds=1)), "total": None})
df2["periods (1 sec timedelta)"] = pd.to_datetime(df2["periods (1 sec timedelta)"], yearfirst=True).dt.time
total = len(df[(df['start'] <= x) & (df['end'] >= x)])
total
=8.如果对df2
中的每一行进行计算,则需要很长时间.有没有更有效的方法?