【问题标题】:Dropping rows that fall below a certain percentage threshold of the total rows/sum [Python]删除低于总行数/总和的特定百分比阈值的行 [Python]
【发布时间】:2023-01-30 15:40:33
【问题描述】:

我在过滤掉低于数据框中总行数的 5%(特定或通用解决方案会有所帮助,因此我可以根据需要重现/调整要求)的犯罪 - “OffenseDescription” 时遇到问题。

到目前为止,这是我尝试过的方法,但它正在使内核崩溃,并且本质上是在运行无限循环/执行。

我也在 VS Code 中通过 Jupyter Notebook 执行此操作。

这是我到目前为止尝试过的代码:

  tot=crime.OffenseDescription.sum()  #Find sum of column 
  
  crime[crime.groupby(['OffenseDescriptiom']).transform(lambda x:
  (x.div(tot)*100)<0.05)]   #calculate percentage filter as per
  condition

链接到我正在使用的数据框的 .head() 的屏幕截图:

TIA

【问题讨论】:

  • 您可以添加一些数据样本来提问和尝试什么(您的代码)吗?
  • 刚刚添加了我的尝试,我一开始忘了。
  • 你为什么使用groupby?您是否需要每组的测试值?如果是,哪些列用于分组?
  • 我从中提取值以设置百分比阈值的列是“OffenseDescription”。我使用 groupby 将不同的 Offenses 分组在一起。无论如何,那是我的意图

标签: python pandas dataframe visual-studio-code jupyter


【解决方案1】:

使用 Series.value_counts 对百分比进行归一化,并删除 0.05 下方的组 boolean indexing 中大于或等于 0.05 的过滤映射列:

percentage = crime.OffenseDescription.value_counts(normalize=True) 

crime[crime['OffenseDescriptiom'].map(percentage) >= 0.05)] 

【讨论】:

  • 太感谢了!我将测试代码然后关闭它。
  • 有没有办法可以关闭问题/将其标记为已解决,但不删除它以便我以后可以参考它?
  • @Fixer - 你认为accepting?我认为没有理由删除答案。
猜你喜欢
  • 2013-11-17
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2022-11-27
  • 2018-04-03
相关资源
最近更新 更多