我有以下資料框:
客戶發票清單。
| 客戶 | 凈總值 | 發布 |
|---|---|---|
| 一個 | 1000 | 2021 年 1 月 1 日 |
| 一個 | 2500 | 2021 年 3 月 1 日 |
| 乙 | 1500 | 2021 年 5 月 1 日 |
| 乙 | 2000 | 2021 年 7 月 1 日 |
相同客戶的串列和促銷優惠的日期。
| 客戶 | 改變日期 |
|---|---|
| 一個 | 2021 年 2 月 1 日 |
| 乙 | 2021 年 6 月 1 日 |
日期格式為 dd/mm/yyyy。
我需要將它們展平到另一個資料框中,顯示更改日期之前和之后的總數,如下所示:
| 客戶 | 改變日期 | 凈總值 | 變更前 | 變更后 |
|---|---|---|---|---|
| 一個 | 2021 年 2 月 1 日 | 3500 | 1000 | 2500 |
| 乙 | 2021 年 6 月 1 日 | 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)
uj5u.com熱心網友回復:
利用:
#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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/420062.html
標籤:
