【发布时间】:2020-08-19 21:06:25
【问题描述】:
我有一个类似于以下格式的 DataFrame:
date customer_id transaction_id amount fraud
2020-01-01 1 10 25 0
2020-01-01 2 11 14 1
2020-01-02 1 12 48 1
2020-01-02 2 13 12 1
2020-01-02 2 14 48 1
2020-01-03 1 15 30 0
按date、customer_id、transaction_id排序。
我现在想创建两个新列,fraud_count,它将显示该客户在当前日期(但不包括当前日期)进行的欺诈 (fraud == 1) 交易的数量。 fraud_sum 会一样,但是是交易金额的累计,而不是计数。
date customer_id transaction_id amount fraud fraud_count fraud_sum
2020-01-01 1 10 25 0 0 0
2020-01-01 2 11 14 1 0 0
2020-01-02 1 12 48 1 0 0
2020-01-02 2 13 12 1 1 14
2020-01-02 2 14 41 1 1 14
2020-01-03 1 15 30 0 1 48
2020-01-03 2 16 88 0 3 67
我怎样才能做到这一点?是否可以创建一个查看整个 DataFrame 或当前行之前的所有行的函数,然后使用 pd.DataFrame.apply() 将其应用于每一行?
【问题讨论】:
-
过滤出日期为 customer_id 和
aggregate上应用 groupby 并在列fraud和amount上使用函数cumsum。 -
你的价值观正确吗?根据您的逻辑,第 3 行的数量应该是 25 而不是 0?
-
否,因为它应该只计算以前的值
fraud == 1
标签: python pandas apply aggregate-functions