Pandas:สร้างรายเดือ subtotals ที่ยังไม่ได้จ่าย invoices

0

คำถาม

ฉันมี dataframe นั่นดูเหมือนนี้:

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

แต่ละแถวเป็นตัวแทนของกา invoice นั้นได้ถูกจ้างที่ DF วมถึงข้อมูลกับ invoiced วัน spanning จาก 2019-01 กันวันนี้

ฉันกำลังพยายามทำบางอย่ารายงานบนเป็นรายเดือนพื้นที่จะระบุตัวเท่าไหร่$นเป็นที่ยอดเยี่ยในตอนจบของทุกๆเดือน

ฉันจัดการส่งออก df แสดงถึงทุกเดือนตั้งแต่แรก invoice วันและเป็นที่เก็บผลรวมของที่ยอดเยี่ย 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 จะมาจากสรุปได้แรงจำนวนเงินโดบประมาณ invoiced สำหรับแต่ละเดือนที่ invoice ไม่ได้ถูกปิดแล้ว

ตัวอย่างเช่นใน 2019-08 เราสรุปจำนวนเงินโดบประมาณ invoiced สำหรับกำปั้นสาม invoices, 1443.62 + 3585.78 + 68276.25 = 73,305.65, ตั้งแต่สามคนนี้ invoices ถูกทิ้งให้อยังไม่ได้จ่ายในตอนจบของเดือนสิงหาคม นี่ตรรกะจะทำต่อไปจนกว่า invoice คือจ่ายเงินแต่ invoice มันไม่ใช่เรื่องที่ยอดเยี่ย 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 sequences มันอาจจะเป็นทางที่จะทำพวกนั้นกำลังดังในหนึ่งหรือสองคนฟังก์ชันเรียกไม่เหมือนเธอได้ติดตั้ง ฉันแน่ใจว่าจะมีคนคอยท่อน
Tim Roberts

นี่คือช่วยได้แต่มันดูเหมือนจะแค่ทำงานสำหรับเดือนแรก. คนทีหลังเดือนมีสูงค่ามากกว่าพวกเขาควรนะ เมื่อ invoice คือปิดมันควรจะควรไม่รวมอยู่ในความเดือน
ksan

เรื่องนี่รู้กันแค่สองคนใช่ไห,typo. ฉันจะแก้ไขมันได้ คุณสามารถเห็นมันไกลใช่มั้ยคอลัมน์พูดถูกฉันเป็นแค่การบันทึกการผิดคอลัมน์ที่ df.
Tim Roberts

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่