这是我正在处理的数据的示例。 (作为 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]
不幸的是,上面的代码不起作用。
提前致谢。
最佳答案
您可以按 inv
和 Rev_stream
列对数据进行分组,然后检查每个组是否同时具有 Original
和 Rebill
code> 位于 Bill_type
值中,并根据条件进行过滤:
(df.groupby(['inv', 'Rev_stream'])
.filter(lambda g: 'Original' in g.Bill_type.values and 'Rebill' in g.Bill_type.values))
关于Python Pandas - 按组内唯一值的数量过滤 df,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40088710/