【问题标题】:Creating multiple quantile outputs based on condition of a value of a specific row根据特定行的值的条件创建多个分位数输出
【发布时间】:2019-09-16 06:52:39
【问题描述】:

我有一个包含如下列的 df:

   xx_id          interval_start_time                   interval_end_time      percentage_rate  
    bd63             2019-04-01 20:00:00.000                  2019-04-01 20:30:00.000       0.208   
    a519             2019-04-01 22:00:00.000                  2019-04-01 22:30:00.000       0.083   

我想根据 interval_start_time 列计算 percentage_rate 列 的百分位数(多个百分位数,如 p5 p25 p50 p75 p90 ) em>。也许我可以输入 interval_start_time 列 的日期和时间(因此我可以为该列中的不同值执行此操作,因为该列包含不同的日期和时间间隔) 它会给我想要的百分位数或分位数?

感谢您的时间

【问题讨论】:

  • 不是 100% 确定你需要什么,也许你可以澄清这个问题。但就开始查看的最佳方法而言,可能是pandas.pydata.org/pandas-docs/stable/reference/api/… 您可以在此方法中使用自定义存储桶。找到分位数的范围
  • 输出将只是上面针对 percent_rate 列所述的不同分位数。但是基于 interval_start_time 列值,因为我想计算分位数的该列有不同的值,抱歉,如果不清楚@run-out

标签: python python-3.x pandas data-science data-analysis


【解决方案1】:
df.groupby(df['interval_start_time'].dt.day)['percentage_rate'].apply(lambda x: np.percentile(x, [25,50,75,100]))

您可以将“日期”更改为您希望日期分组的任何内容。确保 df['interval_start_time'] 是一个日期时间列。您还可以更改 [] 中的值以显示您感兴趣的任何百分位数。

【讨论】:

  • 非常感谢,如果我想要 5 个不同的 interval_start_time 值,我必须运行这段代码 5 次?
  • 是的,所以如果您想按月对日期进行分组,您可以逐月更改。
  • df.groupby(df['interval_start_time'])['percentage_rate'].apply(lambda x: np.percentile(x, [25,50,75,100])) 您将返回一列包含所有时间,另一列包含这些时间的所有百分位值。
  • 您需要在分组之前过滤您的时间。即df2=df[df'['interval_start_time'] == '2019-04-01 20:30:00.000'].copy()(或者你可以做一个时间等......)然后在df2上运行代码。
  • 将其更改为:np.percentile(x, [25,50,75,100]).round(2)。那应该可以。
猜你喜欢
  • 2018-05-01
  • 1970-01-01
  • 2023-03-20
  • 2023-01-12
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 2013-03-07
  • 2020-09-12
相关资源
最近更新 更多