Python Pandas - 按组内唯一值的数量过滤 df

标签 python pandas dataframe filtering

这是我正在处理的数据的示例。 (作为 pandas 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,以仅获取发票/Rev_stream 组契约(Contract)时具有原始和重新计费类型 Net_rev 的行。在上面的示例中,只有索引为 7 和 8 的行。

有没有一种简单的方法可以做到这一点,而无需迭代整个数据帧并构建发票+RevStream:Bill_type 的字典?

我正在寻找的是某种

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

不幸的是,上面的代码不起作用。

提前致谢。

最佳答案

您可以按 invRev_stream 列对数据进行分组,然后检查每个组是否同时具有 OriginalRebill code> 位于 Bill_type 值中,并根据条件进行过滤:

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

enter image description here

关于Python Pandas - 按组内唯一值的数量过滤 df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40088710/

相关文章:

python - 从字典列表创建 Pandas MultiIndex 的最佳方法是什么?

python - 退出全屏时 Tkinter 应用程序消失

python - 当存在多个订单属性时加快 App Engine 本地 SDK 数据库查询?

python - 在 Airflow 中生成多个任务时颠倒上游/下游关系

python - 在哪里可以找到函数的 kwargs/args 文档

python - 给 Pandas 数据框起个名字?

python - 无法用所有列的列值填充缺失值

python - 带有 pyarrow 的消费者-生产者模式

python - 使用Python根据文件中的标题名称更改CSV数值

python - pandas 将时间序列转换为多列 DataFrame