【问题标题】:Pandas Dataframes operation熊猫数据框操作
【发布时间】:2018-11-12 00:53:17
【问题描述】:

我使用 pandas 数据框来处理我的数据集。我有 3 列,airport_id airport_id 和 delay。我想删除所有少于 5 家航空公司的始发机场。

我这样做了:

grouped_size = df.groupby(['OP_CARRIER_AIRLINE_ID','ORIGIN_AIRPORT_ID']).size()

这给了我每个机场的航空公司数量(我希望),但我不知道如何删除少于 5 家航空公司的航空公司。谢谢!

【问题讨论】:

  • df = df[df.groupby(['OP_CARRIER_AIRLINE_ID','ORIGIN_AIRPORT_ID']).transform('count') >= 5]?
  • @coldspeed 或使用groupby(...).filter(...) - 如果系列没有用于任何用途,请保存它?
  • @JonClements,我猜filter 需要lambda?如果是这样,我都赞成避免lamda :)。
  • @coldspeed 我收到此错误“ValueError: Boolean array expected for the condition, not float64”
  • @KaanYolsever 请正确复制整个命令。

标签: python pandas pandas-groupby


【解决方案1】:

这是一个简单的方法:

grouped_size = df.groupby(['OP_CARRIER_AIRLINE_ID','ORIGIN_AIRPORT_ID']).size().reset_index()
grouped_size.columns = ['OP_CARRIER_AIRLINE_ID','ORIGIN_AIRPORT_ID', 'size']
hi_mask = grouped_size['size'] > 5
grouped_size = grouped_size[hi_mask]

【讨论】:

  • @ 谢谢,但我收到此错误:'>' 在 'str' 和 'int' 的实例之间不受支持
  • 一件事是当我这样做时,我会丢失其他列。如何在将它们保留在输出数据结构中的同时做到这一点?
  • 一旦您执行groupby,您基本上是在要求 pandas 依赖基本数据帧。因此,您不再使用基本数据框。如果您只想选择满足此条件的那些,则需要merge 具有基本 df 的 groupy df,然后再次过滤。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多