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

时间:2016-10-17 14:12:05

标签: python pandas dataframe filtering

以下是我正在处理的数据示例。 (作为熊猫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的行。

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

我正在寻找的是某种

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

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以按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))

enter image description here