大熊猫选择每个小组的日期计数

时间:2017-07-19 09:33:15

标签: python pandas pandas-groupby

我有一个包含以下格式信息的数据集。

Customerid ,customerinvoicedate, customerduedate, customrpaiddate, amount, cleared ?
1, 03-mar-2017, 02-june-2017, 03-april-2017, $200 ,   yes
2, 01-jan-2017, 11-dec-2017,  15-dec-2017,   $25000,  yes
1, 01-aug-2017, 05-oct-2017,  04-sep-2017, $100,    yes

我想对每个发票的客户和每个组进行分组,我想计算在customerinvoicedate之前清算的发票数量。 现在为客户1 在记录 01-aug-2017 日期的发票时,应检查已清算的先前发票并计算它们。 (这里数是1)

我试过这个,但似乎没有工作。

data.groupby(['Customerid']).apply(lambda x:np.count(data['customrpaiddate']<=x['customerinvoicedate']))
  

它给出了一个错误: - ValueError:只能比较带有相同标记的Series对象

1 个答案:

答案 0 :(得分:1)

比较&#34;付费日期&#34;和&#34;截止日期&#34;,你可以求和布尔结果(如True = 1和False = 0)来计算出现次数True。 由于您希望&#34;到目前为止清算的发票数量为#34;,您需要使用累计金额:

cleared_invoices = df.groupby('Customerid').apply(lambda x: (x['customrpaiddate'] <= x['customerduedate']).cumsum())\
                                           .reset_index(level = 0, drop = True)\
                                           .rename('Cleared Invoices')

out = pd.concat([df, cleared_invoices], axis = 1)

给出:

out
Out[137]: 
   Customerid  customerinvoicedate  customerduedate  customrpaiddate  \
0           1           03-03-2017       2017-02-06       2017-03-04   
1           2           01-01-2017       2017-11-12       2017-12-15   
2           1            01-8-2017       2017-05-10       2017-04-09   

      amount  cleared  Cleared Invoices  
0       $200      yes                 0  
1     $25000      yes                 0  
2       $100      yes                 1