鱼C论坛

 找回密码
 立即注册
查看: 1399|回复: 3

[已解决]如何快速地刪除所有不在每一列IQR 內的数

[复制链接]
发表于 2021-11-19 19:32:19 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 kkken 于 2021-11-20 17:58 编辑

一个dataframe, 有28列。
我只会一个一个列找它的IQR,然後刪除相应的行。
如何快速地刪除所有不在每一列IQR 內的行数。
谢谢。
最佳答案
2021-11-20 00:35:22
本帖最后由 阿奇_o 于 2021-11-20 00:39 编辑

你说的IQR 应该是统计学的 四分位距(InterQuantile Range) 吧,它的是 第三分位数Q3 - 第一分位数Q1 的 差值。
所以,你要过滤出"在每一列IQR內的行数",也就是 分别过滤 大于Q1,小于Q3的 部分,
具体看如下的例子:
>>> df = pd.DataFrame({'a':[1, 3, 5, 7, 9], 'b':[0, 2, 4, 6, 8]})
>>> df
   a  b
0  1  0
1  3  2
2  5  4
3  7  6
4  9  8
>>> Q1, Q3 = df.quantile(0.25), df.quantile(0.75) # a,b两列的 Q1分别为3, 2  Q3分别为7, 6
>>> df = df[ df>=Q1 ]
>>> df = df[ df<Q3 ]
>>> df.dropna()
     a    b
1  3.0  2.0
2  5.0  4.0
>>> 

ps: 个人对统计学也不懂(只是曾自学过),以上可能有错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-19 23:31:12 | 显示全部楼层
看得一头雾水
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-20 00:35:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 阿奇_o 于 2021-11-20 00:39 编辑

你说的IQR 应该是统计学的 四分位距(InterQuantile Range) 吧,它的是 第三分位数Q3 - 第一分位数Q1 的 差值。
所以,你要过滤出"在每一列IQR內的行数",也就是 分别过滤 大于Q1,小于Q3的 部分,
具体看如下的例子:
>>> df = pd.DataFrame({'a':[1, 3, 5, 7, 9], 'b':[0, 2, 4, 6, 8]})
>>> df
   a  b
0  1  0
1  3  2
2  5  4
3  7  6
4  9  8
>>> Q1, Q3 = df.quantile(0.25), df.quantile(0.75) # a,b两列的 Q1分别为3, 2  Q3分别为7, 6
>>> df = df[ df>=Q1 ]
>>> df = df[ df<Q3 ]
>>> df.dropna()
     a    b
1  3.0  2.0
2  5.0  4.0
>>> 

ps: 个人对统计学也不懂(只是曾自学过),以上可能有错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-20 18:05:39 From FishC Mobile | 显示全部楼层
阿奇_o 发表于 2021-11-20 00:35
你说的IQR 应该是统计学的 四分位距(InterQuantile Range) 吧,它的是 第三分位数Q3 - 第一分位数Q1 的  ...

谢谢。
另外,我想问您知道dimension reduction (PCA) 吗?
我是python 新手。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 18:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表