熊猫:计算每小时数据的中位数,按日期分组

时间:2018-04-14 23:41:37

标签: python pandas

我正在研究一个包含芝加哥市出租车数据的数据集。该数据包含诸如出租车ID,时间戳,票价等信息。下面显示了数据样本,时间戳记在pandas datetime:

enter image description here

对于给定的时间范围,可以是一小时/天/周,我想计算中位数:典型的出租车在整个数据集的时间范围内制作并分析其概况。例如,如果我想每小时考虑一次数据,我可以通过在出租车ID和小时之间创建一个数据透视表,然后取出总金额的中位数来可视化出租车的中位收入如何按小时变化。

taxiByHour = taxiData.pivot_table(index='Taxi ID',columns='Hour',aggfunc=sum)
taxiByHour.fillna(0,inplace=True)
taxiByHour['Trip Total'].median().plot(kind='bar', x='hour', rot = 0, color = 'green')

这显然是计算在那个小时内数据中发生的所有游乐设施的中位数。我怎样才能扩展这一点,以便我可以按数据的所有时间跨度按小时连续显示这个中值?因此,如果我正在考虑一周的数据,我想显示每小时收入中位数的概况,为24 * 7 = 168小时。

1 个答案:

答案 0 :(得分:1)

如果您的数据包含columns=["Taxi ID", "Timestamp", "Fare"]行,则将时间戳转换为datetime.datetime格式(如果尚未),并将其设为索引,即df.index=df["Timestamp"]。然后,您可以pd.DataFrame.resample使用规则(在您的情况下为'H')和内置方法(请参阅https://pandas.pydata.org/pandas-docs/stable/api.html#resampling)或.apply您自己的方法。例如:

df = pd.DataFrame([[1],[2]],index=[datetime(2017,1,1,1),datetime(2017,1,1,2)])
resampled = df.resample('H').median()