根据另一个 table 的日期计算总和

Calculating a sum based on the date from another table

我有以下数据框:

客户发票列表。

Client NetTotal Issued
A 1000 01/01/2021
A 2500 03/01/2021
B 1500 05/01/2021
B 2000 07/01/2021

相同客户的列表和促销优惠的日期。

Client ChangeDate
A 02/01/2021
B 06/01/2021

日期格式为 dd/mm/yyyy。

而且我需要将它们展平到另一个显示更改日期前后总计的数据框中,如下所示:

Client ChangeDate NetTotal BeforeChange AfterChange
A 02/01/2021 3500 1000 2500
B 06/01/2021 3500 1500 2000

谢谢。

data_invoices = {'Client': ['A', 'A', 'B', 'B'], 'NetTotal': [1000,2500,1500,2000], 'Issued':['01/01/2021','03/01/2021', '05/01/2021', '07/01/2021']}
df_invoices = pd.DataFrame(data_invoices)

data_changes = {'Client': ['A', 'B'], 'ChangeDate': ['02/01/2021', '06/01/2021']}
df_changes = pd.DataFrame(data_changes)

使用:

#convert columns to datetimes
df_invoices['Issued'] = pd.to_datetime(df_invoices['Issued'], dayfirst=True)
df_changes['ChangeDate'] = pd.to_datetime(df_changes['ChangeDate'], dayfirst=True)

#added column for compare with greater
df_invoices['ChangeDate'] = df_invoices['Client'].map(df_changes.set_index('Client')['ChangeDate'])

df_invoices['g'] = np.where(df_invoices['ChangeDate'].gt(df_invoices['Issued']), 'BeforeChange','AfterChange')

#pivoting with aggregate sum
df1 = df_invoices.pivot_table(index='Client', columns='g', values='NetTotal', aggfunc='sum')
#added total aggregation sum with before after column
df = df_changes.join(df_invoices.groupby('Client')['NetTotal'].sum(), on='Client').join(df1, on='Client')
print (df)
  Client ChangeDate  NetTotal  AfterChange  BeforeChange
0      A 2021-01-02      3500         2500          1000
1      B 2021-01-06      3500         2000          1500