【问题标题】:Pandas: Compute sum of values for each unique element ('ID') in a given timeframe and then compute the median across all 'ID'sPandas:计算给定时间范围内每个唯一元素(“ID”)的值总和,然后计算所有“ID”的中位数
【发布时间】:2018-04-17 01:23:54
【问题描述】:

我正在处理一个数据集,其中包含来自芝加哥市出租车行程的数据。数据包含每次行程的信息,例如出租车 ID、时间戳、票价等。下面显示了来自df.head() 的数据示例,时间戳为 pandas 日期时间:

                                            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. 考虑用户选择的分箱选项:例如:小时。
  2. 按打车ID对数据进行分组,总结每辆打车在该小时内的造车量。
  3. 根据出租车 ID(仍在该一小时内)计算所有出租车之间所有此类“每小时收入”的中位数。
  4. 在时间范围内每小时重复一次。一周,这是 24*7 = 168 次。
  5. 绘制一周中所有小时的每小时中位数。

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

到目前为止,我可以使用pivot_table 来获取整个时间范围内一天中每小时的收入中位数(但这不是一周中的每个小时),或者使用resample 来获取获得一段时间内的平均票价(但这不是出租车的“每小时收入”,这是每次行程的平均票价)。这些都不能完全达到我想要的,我应该如何实现呢?

【问题讨论】:

  • 如果您可以将数据框包含为文本而不是图像会更有帮助。
  • 改成文字

标签: python pandas median


【解决方案1】:

通过首先将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()

【讨论】:

    猜你喜欢
    • 2018-05-19
    • 2020-06-05
    • 1970-01-01
    • 2013-02-15
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多