为了账号安全,请及时绑定邮箱和手机立即绑定

PANDAS 分位数根据我们的提问方式给出不同的答案

PANDAS 分位数根据我们的提问方式给出不同的答案

MMTTMM 2023-01-04 15:46:52
两天前的新问题。当您拥有大量数据时,PANDAS 可以让您在生成统计数据的同时就地过滤内容,因此您不必为所有内容创建新的数据框。现在,我怀疑这样做有细微差别,因为以两种不同的方式做事 - 一种是“智能”方式,一种是“明确”方式,给了我非常不同的答案,一种显然是正确的(明确的),一个显然是错误的(聪明的方式)。有人可以指出我所缺少的方向。这是细节。我有 250 万行数据,描述了一系列不同设备类型的故障时间。其中两个的描述性统计数据如下。(请注意,这些实际上是采矿设备,但我必须清理一些东西,所以我已经替换了名称)。                                   Count        Min        Mean          MaxCC_CauseLocationEquipmentType                                           Coffee Machines                    204136  0.000556   71.797146  23407.41667Blenders                            52424  0.008333  750.880591  23077.79167如果我尝试获取设备故障时间的分位数,使用print(df2.groupby("CC_CauseLocationEquipmentType").quantile([.1, .25, .5, .75,0.9,0.95,0.99,0.99999]))然后我看到以下分位数。
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

很有意思。至少在我的 Pandas (0.25.1) 版本中显然存在一个 bug df.groupby(...).quantile(<array-like>)。该代码路径是不同的,甚至在非常简单的例子中似乎也被打破了,比如:


df = pd.DataFrame(

    {"A": [0., 0., 0.], "B": ["X", "Y", "Z"]}

)

result = df.groupby("B").quantile([0.5, 0.9])

虽然它适用于 2 元素版本:


df = pd.DataFrame(

    {"A": [0., 0.], "B": ["X", "Y"]}

)

result = df.groupby("B").quantile([0.5, 0.9])

我会避免在类似数组的对象上使用 groupby 和分位数,直到代码被修复,即使在它现在可以工作的情况下也是如此,因为它很可能容易出错。


Blame 还显示了很多相当新鲜的更新(10 个月、16 个月)也正是处理这些代码片段。


查看完整回答
反对 回复 2023-01-04
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

您在两个示例中都看不到分位数在起作用。只有零,每个组只有一个元素,所以结果总是零。还是我在这里错了?


我有 pandas 0.25.3 并获得有用的结果


import pandas as pd


df = pd.DataFrame(

    {"A": [1., 2., 3., 4., 5., 6.], "B": ["X", "X", "Y", "Y", "Z", "Z"]}

)

result = df.groupby("B").quantile([0.5, 0.9])

print(result)

输出:


        A

B         

X 0.5  1.5

  0.9  1.9

Y 0.5  3.5

  0.9  3.9

Z 0.5  5.5

  0.9  5.9

如果它适用于传递给你的单个数字,quantiles()你可以破解类似


q = [0.2, 0.5, 0.9]

res = [df.groupby("B").quantile(_).loc['X', 'A'] for _ in q]


df_q = pd.DataFrame({'A':res, 'quantiles':q})


print(df_q)

输出:


     A  quantiles

0  1.2        0.2

1  1.5        0.5

2  1.9        0.9

直到它被修复。


查看完整回答
反对 回复 2023-01-04
  • 2 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信