我有一个包含以下格式信息的数据集。
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对象
答案 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