亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Pandas 中刪除具有標準偏差的組中的異常值?

在 Pandas 中刪除具有標準偏差的組中的異常值?

至尊寶的傳說 2022-07-05 19:43:28
我有一個 Pandas 數據框,我正在嘗試逐組刪除異常值。如果組中的每一行超出列的范圍,則將其視為異常值[group_mean - (group_std_dev * 3), group_mean + (group_std_dev * 3)]其中 group_mean 是組中列的平均值,group_std_dev 是組中列的標準差。我嘗試了以下熊貓鏈df.groupby(by='group').apply(lambda x: x[(x['col'].mean() - (x['col'].std() * 3)) < x['col'] < (x['col'].mean() - (x['col'].std() * 3)])但它似乎沒有工作,因為 Pandas 會在 apply 內部進行比較時引發以下錯誤The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().該錯誤對我來說似乎沒有多大意義,因為比較應該轉換為一系列布爾值,然后將其應用于組 x?但是,僅通過上限或下限進行過濾確實有效,例如df.groupby(by='group').apply(lambda x: x[(x['col'].mean() - (x['col'].std() * 3)) < x['col'])但我不確定如何將這些鏈接在一起。有沒有人對如何簡單而干凈地實現這一點有任何想法?這對我來說似乎并不難,但這里的其他帖子并沒有產生令人滿意或有效的答案。
查看完整描述

1 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

使用GroupBy.transformand Series.between,這樣更快:


groups = df.groupby('group')['col']

groups_mean = groups.transform('mean')

groups_std = groups.transform('std')

m = df['col'].between(groups_mean.sub(groups_std.mul(3)),

                      groups_mean.add(groups_std.mul(3)),

                      inclusive=False)

print(m)

new_df = df.loc[m]

When should I want to use apply


您的應用代碼可能是:


df.groupby(by='group')['col'].apply(lambda x: x.lt( x.mean().add(x.std().mul(3)) ) & x.gt( x.mean().sub(x.std().mul(3)) ))



查看完整回答
反對 回復 2022-07-05
  • 1 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號