这是一个关于计算一天中每分钟公交车乘客平均数的问题,给出了公交车行程开始和结束时间的DF1列表(小时:分钟),一个包含从任何一天(日期不可知)的凌晨3:01到凌晨3:00(次日)的“时间窗口”作为其索引的DF2。你知道吗
DF1包含每个行程的数据,使用以下代码构建:
start = [pd.to_datetime('03:01'),pd.to_datetime('03:08'),pd.to_datetime('03:06')]
finish = [pd.to_datetime('03:11'),pd.to_datetime('03:13'),pd.to_datetime('03:16')]
df1 = pd.DataFrame()
df1['passengers'] = [10, 15, 20]
df1['t1'] = start
df1['t2'] = finish
df1
导致:
passengers t1 t2
0 10 2019-07-20 03:01:00 2019-07-20 03:11:00
1 15 2019-07-20 03:08:00 2019-07-20 03:13:00
2 20 2019-07-20 03:06:00 2019-07-20 03:16:00
DF2包含一个从凌晨3点01分到凌晨3点的“时间窗口”(好像常规的24小时被向前移动了3小时),如下所示:
cuthour = '03:00' # <--- user input
cuthour = pd.to_datetime(cuthour)
idx = pd.date_range(cuthour+pd.to_timedelta('1min'),'23:59', freq='T').append(pd.date_range('00:00',cuthour,freq='T'))
df2 = pd.DataFrame(index=idx)
df2['passengers'] = 0 #initialize with zeros
生成df2.info():
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 1440 entries, 2019-07-20 03:01:00 to 2019-07-20 03:00:00
Data columns (total 1 columns):
pessoas 1440 non-null int64
dtypes: int64(1)
我想要的是一个DF2,包含任何日期的平均乘客数/分钟,如下所示:
2019-07-20 03:01:00 1.0
2019-07-20 03:02:00 1.0
2019-07-20 03:03:00 1.0
2019-07-20 03:04:00 1.0
2019-07-20 03:05:00 1.0
2019-07-20 03:06:00 1.5
2019-07-20 03:07:00 1.5
2019-07-20 03:08:00 2.0
2019-07-20 03:09:00 2.0
2019-07-20 03:10:00 2.0
2019-07-20 03:11:00 2.5
2019-07-20 03:12:00 2.5
2019-07-20 03:13:00 2.0
2019-07-20 03:14:00 2.0
2019-07-20 03:15:00 2.0
2019-07-20 03:16:00 0.0
2019-07-20 03:17:00 0.0
...
但我得到的却是:
2019-07-20 03:01:00 1.0
2019-07-20 03:02:00 1.0
2019-07-20 03:03:00 1.0
2019-07-20 03:04:00 1.0
2019-07-20 03:05:00 1.0
2019-07-20 03:06:00 3.0
2019-07-20 03:07:00 3.0
2019-07-20 03:08:00 6.0
2019-07-20 03:09:00 6.0
2019-07-20 03:10:00 6.0
2019-07-20 03:11:00 5.0
2019-07-20 03:12:00 5.0
2019-07-20 03:13:00 2.0
2019-07-20 03:14:00 2.0
2019-07-20 03:15:00 2.0
2019-07-20 03:16:00 0.0
2019-07-20 03:17:00 0.0
...
使用此代码:
def calcmean(x):
ir = pd.date_range(x.t1,x.t2,freq='T')
lir = len(ir)-1
mp = x.passengers/lir
df2.loc[df2.index.isin(ir)] = df2.loc[df2.index.isin(ir)] + mp
df1.apply(calcmean, axis=1)
df2
当然,每次旅行的平均乘客/分钟是与之前每分钟的平均值相加,而不是找到新的平均值。我找不到重新计算平均数的方法。你知道吗
为了更好地查看数据:
mean of... TOTAL total
HH:MM trip1 trip2 trip3 MEAN sum
03:01 1 1 1
03:02 1 1 1
03:03 1 1 1
03:04 1 1 1
03:05 1 1 1
03:06 1 2 1.5 3
03:07 1 2 1.5 3
03:08 1 3 2 2 6
03:09 1 3 2 2 6
03:10 1 3 2 2 6
03:11 3 2 2.5 5
03:12 3 2 2.5 5
03:13 2 2 2
03:14 2 2 2
03:15 2 2 2
trip1 mean = 10 passengers / 10 minutes = 1 passenger/minute
trip2 mean = 15 passengers / 5 minutes = 3 passengers/minute
trip3 mean = 20 passengers / 10 minutes = 2 passengers/minute
我要的是总平均数,我得到的是总平均数。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐