【问题标题】:Python Pandas - filtering df by the number of unique values within a groupPython Pandas - 按组内唯一值的数量过滤 df
【发布时间】:2017-02-26 13:47:09
【问题描述】:

这是我正在处理的数据示例。 (作为熊猫df)

    index   inv Rev_stream  Bill_type   Net_rev
       1    1   A           Original    -24.77
       2    1   B           Original    -24.77
       3    2   A           Original    -409.33
       4    2   B           Original    -409.33
       5    2   C           Original    -409.33
       6    2   D           Original    -409.33
       7    3   A           Original    -843.11
       8    3   A           Rebill       279.5
       9    3   B           Original    -843.11
      10    4   A           Rebill       279.5
      11    4   B           Original    -843.11
      12    5   B           Rebill       279.5

如何过滤此 df,以仅获取 invoice/Rev_stream 组合具有原始和重新计费类型 Net_rev 的行。在上面的示例中,它只会是索引为 7 和 8 的行。

有没有一种简单的方法可以做到这一点,无需遍历整个数据框并构建 invoice+RevStream 的字典:Bill_type?

我正在寻找的是某种

df = df[df[['inv','Rev_stream']]['Bill_type'].unique().len() == 2]

很遗憾,上面的代码不起作用。

提前致谢。

【问题讨论】:

    标签: python pandas dataframe filtering


    【解决方案1】:

    您可以按invRev_stream 列对数据进行分组,然后检查每个组是否OriginalRebill 都在Bill_type 值中并根据条件进行过滤:

    (df.groupby(['inv', 'Rev_stream'])
       .filter(lambda g: 'Original' in g.Bill_type.values and 'Rebill' in g.Bill_type.values))
    

    【讨论】:

    • 非常感谢!我的平均数据集(大约 500k 行)需要一段时间,但它就像一个魅力!
    猜你喜欢
    • 2019-07-26
    • 2022-10-30
    • 2014-02-19
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2019-06-04
    • 1970-01-01
    相关资源
    最近更新 更多