Python:Pandas groupby处理大型数据花费的时间太长

时间:2020-01-13 05:09:02

标签: python pandas

我有一个数据帧,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_NUMBERPayment ModeYear_Month,我们得到的所有值都只有一行。另外,该年月的总发票金额也是如此。

我的方法:

我正在使用以下pandas操作。

df_grp = df.loc[df.groupby(['CA_NUMBER','Payment Mode','Year_Month'])['PAYMENT_DATE'].idxmax()]

这样做的时候,过程变得非常慢,最终我不得不一次又一次地重新启动内核。所以我的问题是:

  1. 有没有更快的方法来实现相同目标?

  2. 如何在上面的代码中添加Total Invoice列?下面的代码片段可以工作吗?

    df_grp['Total_Invoice'] = df.groupby(['CA_NUMBER','Year_Month']).sum()

任何帮助都会很棒。

谢谢

0 个答案:

没有答案