大熊猫:创建月度小计的未付发票

0

的问题

我有一个数据框看起来是这样的:

df:

Index   AMOUNT_INVOICED  INVOICED_DATE    CLOSED_DATE
0         1443.62          2019-08-01        2019-09-04
1         3585.78          2019-08-03        2019-09-04
2         68276.25         2019-08-05        2019-09-04
3         19673.84         2019-09-10        2019-11-06
4         9119.40          2019-09-11        2019-10-07
...
700       9976.25          2021-09-01        2021-10-04
701       7273.84          2021-09-01        2021-11-14
702       3129.40          2021-10-04        2021-11-23

每一行代表的发票已经支付,DF包括数据与开发票的日期,时间跨度从2019-01到今天。

我在尝试做一些报告每月的基础上确定如何更$的是突出在每个月底。

我已经设置了一个输出df,显示了每月以来的第一张发票的日期和地点存储的总和未AR月,它目前看起来像这样:

                    Total Outstanding AR  
Month                                              
2019-08                     0
2019-09                     0 
2019-10                     0  
...
2021-09                     0  
2021-10                     0   

最终我想出来看看事情是这样的:

                    Total Outstanding AR  
Month                                                                        
2019-08                     73,305.65 
2019-09                     28,793.24  
2019-10                     19673.84  
...
2021-09                     17,250.09  
2021-10                     10,403.24   

总的杰出AR将来自总结的金额开具发票的每个月的发票没有被关闭。

例如,在2019-08我们总结的金额开具发票的拳头三张发票, 1443.62 + 3585.78 + 68276.25 = 73,305.65, 由于这三个发票都留未付在八月结束。 这种逻辑将一直持续到支付发票,而该票不作出贡献的杰出AR月份它是支付。

有人可以帮我找出最好的方式去创造我的期望输出?

谢谢你!

date pandas python
2021-11-23 23:33:01
1

最好的答案

1

这应该做什么你问。

import datetime
import pandas as pd
data = {
    'AMOUNT_INVOICED': [ 1443.62, 3585.78, 68276.25, 19673.84,
        9119.40, 9976.25, 7273.84, 3129.40 ],
    'INVOICED_DATE': [ '2019-08-01', '2019-08-03', '2019-08-05',
        '2019-09-10', '2019-09-11', '2021-09-01', '2021-09-01',
        '2021-10-04' ],
    'CLOSED_DATE': [ '2019-09-04', '2019-09-04', '2019-09-04',
         '2019-11-06', '2019-10-07', '2021-10-04', '2021-11-14',
         '2021-11-23' ]
}

df = pd.DataFrame(data)

dates = []
amounts = []
for year in range(2019,2022):
    for month in range(12):
        magic = '%04d-%02d-01' % (year,month+1)
        s1 = df[df['INVOICED_DATE'] < magic]['AMOUNT_INVOICED'].sum()
        s2 = df[df['CLOSED_DATE'] < magic]['AMOUNT_INVOICED'].sum()
        print("%s %10.2f %10.2f %10.2f" % (magic, s1,s2,s1-s2))
        dates.append( magic[:7] )
        amounts.append( s1-s2 )

newdf = pd.DataFrame(amounts, index=dates, columns=['Total Outstanding AR'])
print(newdf)

输出:

2019-01-01       0.00       0.00       0.00
2019-02-01       0.00       0.00       0.00
2019-03-01       0.00       0.00       0.00
2019-04-01       0.00       0.00       0.00
2019-05-01       0.00       0.00       0.00
2019-06-01       0.00       0.00       0.00
2019-07-01       0.00       0.00       0.00
2019-08-01       0.00       0.00       0.00
2019-09-01   73305.65       0.00   73305.65
2019-10-01  102098.89   73305.65   28793.24
2019-11-01  102098.89   82425.05   19673.84
2019-12-01  102098.89  102098.89       0.00
2020-01-01  102098.89  102098.89       0.00
2020-02-01  102098.89  102098.89       0.00
2020-03-01  102098.89  102098.89       0.00
2020-04-01  102098.89  102098.89       0.00
2020-05-01  102098.89  102098.89       0.00
2020-06-01  102098.89  102098.89       0.00
2020-07-01  102098.89  102098.89       0.00
2020-08-01  102098.89  102098.89       0.00
2020-09-01  102098.89  102098.89       0.00
2020-10-01  102098.89  102098.89       0.00
2020-11-01  102098.89  102098.89       0.00
2020-12-01  102098.89  102098.89       0.00
2021-01-01  102098.89  102098.89       0.00
2021-02-01  102098.89  102098.89       0.00
2021-03-01  102098.89  102098.89       0.00
2021-04-01  102098.89  102098.89       0.00
2021-05-01  102098.89  102098.89       0.00
2021-06-01  102098.89  102098.89       0.00
2021-07-01  102098.89  102098.89       0.00
2021-08-01  102098.89  102098.89       0.00
2021-09-01  102098.89  102098.89       0.00
2021-10-01  119348.98  102098.89   17250.09
2021-11-01  122478.38  112075.14   10403.24
2021-12-01  122478.38  122478.38       0.00
         Total Outstanding AR
2019-01                  0.00
2019-02                  0.00
2019-03                  0.00
2019-04                  0.00
2019-05                  0.00
2019-06                  0.00
2019-07                  0.00
2019-08                  0.00
2019-09              73305.65
2019-10              28793.24
2019-11              19673.84
2019-12                  0.00
2020-01                  0.00
2020-02                  0.00
2020-03                  0.00
2020-04                  0.00
2020-05                  0.00
2020-06                  0.00
2020-07                  0.00
2020-08                  0.00
2020-09                  0.00
2020-10                  0.00
2020-11                  0.00
2020-12                  0.00
2021-01                  0.00
2021-02                  0.00
2021-03                  0.00
2021-04                  0.00
2021-05                  0.00
2021-06                  0.00
2021-07                  0.00
2021-08                  0.00
2021-09                  0.00
2021-10              17250.09
2021-11              10403.24
2021-12                  0.00
2021-11-24 01:41:37

如同所有的 pandas 序列,可能有个办法做到的那些运行的总结中的一个或两个功能的电话没有一个循环。 我肯定会有人管。
Tim Roberts

这是有益的,但它似乎只是工作的第一个月。 后来的几个月有一个更高的价值比他们应。 一旦发票是封闭的,它应该被排除在接下来的几个月
ksan

哎呀,错字。 我会修复。 你可以看到,极右栏是正确的,我只是救错误列df。
Tim Roberts

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................