如何解决Pandas:分组然后检索 IQR
我对 Pandas 很陌生,我正在尝试做以下事情:
我有两个数据框 comms
和 arts
,看起来像这样(除了它们与其他列的广告更长)
通讯:
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。
我已经尝试过使用 groupby
、agg
和 map
,但是由于我对 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]
减去它们。因此,我们写了
agg
和 q1
的 2 行
q3
其余的都是一样的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。