首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫:群群然后取回IQR

熊猫:群群然后取回IQR
EN

Stack Overflow用户
提问于 2021-04-22 13:55:55
回答 2查看 3.8K关注 0票数 2

我对潘达斯很陌生,我正努力做以下事情:

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

通讯:

代码语言:javascript
复制
ID    commScore           
10       5                
10       3                  
10      -1                 
11       0                
11       2              
12       9      
13      -2     
13      -1     
13       1      
13       4

艺术:

代码语言:javascript
复制
ID    commNumber
10        3 
11        2    
12        1
13        4      

我需要按ID对comms进行分组,然后在arts中(显然在正确的ID行中)保存每个ID的commScore发行版的四分位数范围(IQR)。

我已经尝试过使用groupbyaggmap,但是由于我对pandas的概念非常有限,所以我无法做我想要的事情。

有人有解决办法吗?

谢谢

安德里亚

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-22 14:51:30

我们可以通过group和聚合列commScore来计算ID和聚合列commScore的数据,使用scipy.stats函数iqr计算四分位数范围,然后在arts数据帧的列ID上计算出计算的iqr范围。

代码语言:javascript
复制
from scipy.stats import iqr

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

代码语言:javascript
复制
   ID  commNumber  IQR
0  10           3    3
1  11           2    1
2  12           1    0
3  13           4    3
票数 7
EN

Stack Overflow用户

发布于 2021-04-22 14:48:04

GroupBy对象有一个quantile方法。您可以计算Q3和Q1,并减去它们。一些重命名和加入的人跟随它:

代码语言:javascript
复制
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)

要获得

代码语言:javascript
复制
>>> arts

    commNumber  IQR
ID
10           3  3.0
11           2  1.0
12           1  0.0
13           4  3.0

如果有多个数字列,那么我们将commScore显式地定义为:

代码语言:javascript
复制
grouper = comms.groupby("ID").commScore
q1, q3 = grouper.quantile(0.25), 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)

结果是一样的。

如果不想调用quantile 2次,可以传递一个列表[0.75, 0.25],然后用agg减去它们。因此,我们不需要上面涉及q1q3的两行代码,而是编写

代码语言:javascript
复制
iqr = grouper.quantile([0.75, 0.25]).groupby("ID").agg(np.subtract.reduce)

其余的都一样。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67214703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档