【问题标题】:How can I calculate the 95th percentile over a table with numpy?如何用 numpy 计算表格的第 95 个百分位数?
【发布时间】:2020-02-14 15:16:18
【问题描述】:

我正在尝试使用 numpy.但是,执行此操作的功能对我来说似乎不清楚,因为它需要一个数组才能工作:

>>> a = np.array([[10, 7, 4], [3, 2, 1]])
>>> a
array([[10,  7,  4],
       [ 3,  2,  1]])
>>> np.percentile(a, 50)

这将是数组上第 50 个百分位数的方式。

这是我的桌子的样子:

Date        Hour    Month       Value
9/1/2019    0:00    SEPTEMBER   377.3333333
9/1/2019    0:00    SEPTEMBER   268.8
9/1/2019    0:00    SEPTEMBER   400.8
9/1/2019    0:00    SEPTEMBER   279.1304348
9/1/2019    0:05    SEPTEMBER   440
9/1/2019    0:05    SEPTEMBER   228
9/1/2019    0:05    SEPTEMBER   350
9/1/2019    0:05    SEPTEMBER   283.2
9/1/2019    0:10    SEPTEMBER   385.3333333
9/1/2019    0:10    SEPTEMBER   240
9/1/2019    0:10    SEPTEMBER   347.5
9/1/2019    0:10    SEPTEMBER   175.2
9/1/2019    0:15    SEPTEMBER   440
9/1/2019    0:15    SEPTEMBER   202.8
9/1/2019    0:15    SEPTEMBER   204
9/1/2019    0:15    SEPTEMBER   182.4
...
9/2/2019    0:00    SEPTEMBER   416
9/2/2019    0:00    SEPTEMBER   134.4
9/2/2019    0:00    SEPTEMBER   370
...

直到九月底

我想计算每 5 分钟间隔的第 95 个百分位数。

最终的结果应该是这样的:

Time    September
0:00    95th Value
0:05    95th Value
0:10    95th Value
0:15    95th Value

....

【问题讨论】:

  • 你能用 pandas 代替 numpy 吗?如果您将表加载到数据框中,则解决方案只是dataframe.groupby(['Hour', 'Month'])['Value'].quantile(0.95)

标签: python numpy percentile


【解决方案1】:
import re
import pandas as pd

data = '''9/1/2019    0:00    SEPTEMBER   377.3333333
9/1/2019    0:00    SEPTEMBER   268.8
9/1/2019    0:00    SEPTEMBER   400.8
9/1/2019    0:00    SEPTEMBER   279.1304348
9/1/2019    0:05    SEPTEMBER   440
9/1/2019    0:05    SEPTEMBER   228
9/1/2019    0:05    SEPTEMBER   350
9/1/2019    0:05    SEPTEMBER   283.2
9/1/2019    0:10    SEPTEMBER   385.3333333
9/1/2019    0:10    SEPTEMBER   240
9/1/2019    0:10    SEPTEMBER   347.5
9/1/2019    0:10    SEPTEMBER   175.2
9/1/2019    0:15    SEPTEMBER   440
9/1/2019    0:15    SEPTEMBER   202.8
9/1/2019    0:15    SEPTEMBER   204
9/1/2019    0:15    SEPTEMBER   182.4
9/1/2019    0:20    SEPTEMBER   416
9/1/2019    0:20    SEPTEMBER   134.4
9/1/2019    0:20    SEPTEMBER   370
9/2/2019    0:05    SEPTEMBER   145.9
9/2/2019    0:05    SEPTEMBER   360'''

data = [re.split('[ ]+', x) for x in data.split('\n')]
df = pd.DataFrame(data, columns=['date','hour','month','value'])
df['value'] = df['value'].astype(float)
print(df.groupby(['date','hour']).value.quantile(0.95))

【讨论】:

  • 您知道如何将结果再次转换为数据框吗?
  • 不打印,而是将 groupby 语句分配给一个变量,然后对该变量调用 .to_frame() 方法。
  • 我使用了 reset.index()。这是否会产生相同的结果,或者我认为如果我继续,我会遇到问题。
猜你喜欢
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 2011-01-23
  • 2019-06-08
相关资源
最近更新 更多