从Pandas数据框架中删除取消的行[英] Remove cancelling rows from Pandas Dataframe

本文是小编为大家收集整理的关于从Pandas数据框架中删除取消的行的处理方法,想解了从Pandas数据框架中删除取消的行的问题怎么解决?从Pandas数据框架中删除取消的行问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一份发送给客户的发票清单.但是,有时会发送错误的发票,随后会被取消.我的 Pandas Dataframe 看起来像这样,除了更大(约 300 万行)

index | customer | invoice_nr | amount | date
---------------------------------------------------
0     | 1        | 1          | 10     | 01-01-2016
1     | 1        | 1          | -10    | 01-01-2016
2     | 1        | 1          | 11     | 01-01-2016
3     | 1        | 2          | 10     | 02-01-2016
4     | 2        | 3          | 7      | 01-01-2016
5     | 2        | 4          | 12     | 02-01-2016
6     | 2        | 4          | 8      | 02-01-2016
7     | 2        | 4          | -12    | 02-01-2016
8     | 2        | 4          | 4      | 02-01-2016
...   | ...      | ...        | ...    | ...
...   | ...      | ...        | ...    | ...

现在,我想删除 customer、invoice_nr 和 date 相同但 amount 具有相反值的所有行.
发票的更正总是在同一天以相同的发票编号进行.发票编号与客户唯一绑定,并且始终对应于一笔交易(可以由多个组件组成,例如 customer = 2、invoice_nr = 4).发票的更正仅发生在更改收费的 amount 或将 amount 拆分为更小的组件时.因此,取消的值不会在同一个 invoice_nr 上重复.

任何关于如何编程的帮助将不胜感激.

推荐答案

def remove_cancelled_transactions(df):
    trans_neg = df.amount < 0
    return df.loc[~(trans_neg | trans_neg.shift(-1))]

groups = [df.customer, df.invoice_nr, df.date, df.amount.abs()]
df.groupby(groups, as_index=False, group_keys=False) \
  .apply(remove_cancelled_transactions)

在此处输入图片描述

本文地址:https://www.itbaoku.cn/post/1728034.html

相关标签/搜索