微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pandas:分组然后检索 IQR

如何解决Pandas:分组然后检索 IQR

我对 Pandas 很陌生,我正在尝试做以下事情:

我有两个数据框 commsarts,看起来像这样(除了它们与其他列的广告更长)

通讯:

ID    commscore           
10       5                
10       3                  
10      -1                 
11       0                
11       2              
12       9      
13      -2     
13      -1     
13       1      
13       4

艺术:

ID    commNumber
10        3 
11        2    
12        1
13        4      

我需要将 comms 按其 ID 分组,然后将 commscore 分布的四分位距 (iqr) 保存在 arts(显然在正确的 ID 行中)对于每个 ID。

我已经尝试过使用 groupbyaggmap ,但是由于我对 Pandas 的概念非常有限,我无法实现我想要的。

有人有解决办法吗?

谢谢

安德里亚

解决方法

我们可以使用 group 中的函数 iqr 通过 ID commScore 数据框和聚合列 scipy.stats 来计算四分位距,然后 {{1 }} 这是在 map 数据框的 iqr 列上计算出的 ID 范围

arts

from scipy.stats import iqr

arts['IQR'] = arts['ID'].map(comms.groupby('ID')['commScore'].agg(iqr))
,

cluster.im.h <- cluster.im.mlogit(m,H.ml,~ region) 对象有一个 GroupBy 方法。您可以计算 Q3 和 Q1,然后将它们相减。一些重命名和加入遵循它:

quantile

得到

grouper = comms.groupby("ID")
q1,q3 = grouper.quantile(0.25),grouper.quantile(0.75)
iqr = q3 - q1
iqr = iqr.rename(columns={"commScore": "IQR"})

arts = arts.set_index("ID").join(iqr)

如果有多个数字列,那么我们将 >>> arts commNumber IQR ID 10 3 3.0 11 2 1.0 12 1 0.0 13 4 3.0 明确表示为:

commScore

给出相同的结果。

如果不想调用 grouper = comms.groupby("ID").commScore q1,grouper.quantile(0.75) iqr = q3 - q1 iqr.name = "IQR" # `iqr` will be a series since we selected 1 column,# so renaming is a bit different arts = arts.set_index("ID").join(iqr) 2 次,可以传递一个列表 quantile,然后用 [0.75,0.25] 减去它们。因此,我们写了

而不是上面涉及 aggq1 的 2 行
q3

其余的都是一样的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。