我有以下資料集。
| 日期 | 區域 | 價值 | 交貨日期 |
|---|---|---|---|
| 01-01-2021 | 美國廣播公司 | 10 | 02-01-2021 |
| 02-01-2021 | BCD | 20 | 04-01-2021 |
| 03-01-2021 | 美國廣播公司 | 15 | 04-01-2021 |
| 04-01-2021 | BCD | 25 | 05-01-2021 |
| 05-01-2021 | 美國廣播公司 | 15 | 06-01-2021 |
我必須創建一個名為 Sum 的新列,它遵循以下條件。
它應該采用當前行,并且應該從其他行中查找具有相同區域和日期大于當前行日期且交貨日期大于當前行“日期”的其他行的值。它應該總結滿足這三個條件的行的值。所以結果表看起來像
| 日期 | 區域 | 價值 | 交貨日期 | 和 |
|---|---|---|---|---|
| 01-01-2021 | 美國廣播公司 | 10 | 02-01-2021 | 40 |
| 02-01-2021 | BCD | 20 | 04-01-2021 | 45 |
| 03-01-2021 | 美國廣播公司 | 15 | 04-01-2021 | 30 |
| 04-01-2021 | BCD | 25 | 05-01-2021 | 25 |
| 05-01-2021 | 美國廣播公司 | 15 | 06-01-2021 | 15 |
我不知道如何開始。有人能幫我嗎?
uj5u.com熱心網友回復:
IIUC,在對日期的資料進行排序后使用GroupBy expanding.sum(從近到古):
# ensure datetime (although this format could be also sorted as string)
df['Date'] = pd.to_datetime(df['Date'])
df['sum'] = (df
.sort_values(by='Date', ascending=False) # reverse values
.groupby(['Area'])['Value'].expanding().sum() # sum recent values
.droplevel(0)
)
輸出:
Date Area Value sum
0 2021-01-01 ABC 10 40.0
1 2021-02-01 BCD 20 45.0
2 2021-03-01 ABC 15 30.0
3 2021-04-01 BCD 25 25.0
4 2021-05-01 ABC 15 15.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456666.html
