Pandas:计算给定时间范围内每个唯一元素(“ID”)的值之和,然后计算所有“ID”的中值

2024-10-05 13:16:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个数据集,其中包含芝加哥市出租车出行的数据。数据包含每次出行的信息,如出租车ID、时间戳、车费等。数据示例如下所示,来自df.head(),时间戳为datetime:

                                            Taxi ID     Pickup Community Area   Trip Total
Trip End Timestamp          
2016-04-25 18:00:00     bfec2c659fcbed3b508dc6caaf6f7ef39e17801e8ca0cc...   8.0     16.00
2016-11-16 15:45:00     f45c4bfa9d6c445eb03ab69093f7ec1e9cdecef83cb2ce...   32.0    9.75
2016-01-15 17:45:00     ecfb6f2cdce5d4c4e80218f58070ae719060ee47e648f4...   32.0    14.75
2016-01-20 21:30:00     7d8179131ea9952793af4cda8635e94b56c2b92d3c376c...   32.0    7.25
2016-02-11 09:15:00     d5c4fbae1c0c510364404a90fd477b19f7f03408ce40ff...   35.0    18.75

假设我有一周的数据,我想实现以下目标:

  1. 考虑一个用户选择的binning选项:例如:hour。你知道吗
  2. 按出租车ID对数据进行分组,并将每辆出租车在一小时内的金额相加。你知道吗
  3. 根据出租车ID计算所有出租车之间所有此类“小时收入”的中位数(仍在这一小时内)。你知道吗
  4. 在时间范围内每小时重复一次。一周,这是24*7=168次。你知道吗
  5. 绘制一周中所有小时的每小时中位数。你知道吗

这可以延长到一周中的几个小时,一年中的几个星期等等

到目前为止,我能够使用pivot_table来获得整个时间范围内一天中每小时的平均收入(但这不是一周中的每小时),或者resample来获得一段时间内的平均票价(但这不是出租车的“小时收入”,这是每次旅行的平均票价)。这两个都不能实现我想要的,我应该如何实现这一点?你知道吗


Tags: 数据信息id示例dfdatetime时间head
1条回答
网友
1楼 · 发布于 2024-10-05 13:16:29

我首先将df.grouby与pandas中的Grouper特性结合起来,就可以为我的数据实现这一点。因此,数据首先按ID分组,对于每个ID,它按时间段(例如小时)重新采样,最终可以通过此命令汇总该特定ID的每小时费用。你知道吗

dfGrouped = (df.groupby(['Taxi ID', pd.Grouper(freq='H', key='Trip End Timestamp')])
     ['Trip Total']
     .sum()
     .unstack(fill_value=0))

由于最后的unstack操作,dfGrouped现在包含了一个二维数组Taxi ID vs Hour。所有出租车ID(行)的中位数仅通过以下方式获得:

dfGrouped.median()

相关问题 更多 >

    热门问题