我有一个数据帧,df
如下:
BLART Amount Paid CA_NUMBER PAYMENT_DATE Payment Mode Year_Month
PC 1040 100000001 10-10-2017 Cheque 2017-10
PA 220 100000001 12-10-2017 Digital 2017-10
PB 1460 100000007 04-10-2017 Cash 2017-10
PB 300 100000007 06-10-2017 Cash 2017-10
PB 1740 100000001 03-11-2017 Cash 2017-11
PA 203 100000001 08-11-2017 Digital 2017-11
PB 1130 100000001 15-11-2017 Cash 2017-11
PC 6660 100000007 10-11-2017 Cash 2017-11
PC 6630 100000007 14-11-2017 Cash 2017-11
原始数据的大小为(43802240,11)
。
我想以某种方式应用groupby
方法,以便对于每个CA_NUMBER
,“付款方式”和Year_Month
,我都有最后的付款金额以及总发票金额。因此,生成的df
应该如下所示:
BLART Amount Paid CA_NUMBER PAYMENT_DATE Payment Mode Total Invoice Year_Month
PC 1040 100000001 10-10-2017 Cheque 1260 2017-10
PA 220 100000001 12-10-2017 Digital 1260 2017-10
PB 300 100000007 06-10-2017 Cash 1760 2017-10
PB 1130 100000001 15-11-2017 Cash 3073 2017-11
PA 203 100000001 08-11-2017 Digital 3073 2017-11
PC 6630 100000007 14-11-2017 Cash 13,290 2017-11
因此,从上面的df
中可以看出,对于每个'CA_NUMBER
,Payment Mode
和Year_Month
,我们得到的所有值都只有一行。另外,该年月的总发票金额也是如此。
我的方法:
我正在使用以下pandas
操作。
df_grp = df.loc[df.groupby(['CA_NUMBER','Payment Mode','Year_Month'])['PAYMENT_DATE'].idxmax()]
这样做的时候,过程变得非常慢,最终我不得不一次又一次地重新启动内核。所以我的问题是:
有没有更快的方法来实现相同目标?
如何在上面的代码中添加Total Invoice
列?下面的代码片段可以工作吗?
df_grp['Total_Invoice'] = df.groupby(['CA_NUMBER','Year_Month']).sum()
任何帮助都会很棒。
谢谢