output下面的列是我要計算的內容,該diffs列是對總和計算的差異的解釋output。
------------ -------- -------------
| date | output | diffs |
------------ -------- -------------
| 01/01/2000 | | |
| 10/01/2000 | 9 | [9] |
| 20/01/2000 | 29 | [10, 19] |
| 25/01/2000 | 44 | [5, 15, 24] |
------------ -------- -------------
我考慮過使用rolling,然后根據當前視窗中的最后一條記錄在每個視窗中為差異創建一個新列,然后將它們相加。但是,rolling似乎沒有能力在 DataFrame 的開頭進行修復。我想我可以計算最小日期和最大日期之間的差異并將其用作滾動期,但這似乎很老套。
我也看過,expanding但是當視窗擴大時,我看不到創建新差異的方法。
是否有一個非回圈的、希望可矢量化的解決方案?
這是資料框:
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
'date': (
dt.datetime(2000, 1, 1), dt.datetime(2000, 1, 10),
dt.datetime(2000, 1, 20), dt.datetime(2000, 1, 25),
),
'output': (np.NaN, 9, 29, 44),
}
)
uj5u.com熱心網友回復:
如果您正在尋找輸出,請嘗試:
datediff = df.date.diff()/pd.Timedelta('1D')
df['output'] = (datediff * np.arange(len(df))).cumsum()
輸出:
date output
0 2000-01-01 NaN
1 2000-01-10 9.0
2 2000-01-20 29.0
3 2000-01-25 44.0
我將把它留給你來解決背后的邏輯。
uj5u.com熱心網友回復:
使用numpy不回圈的廣播:
i = df.date.dt.day.values
j = np.arange(len(df))
df['output'] = np.triu(np.where((j < j[:, None]), i, (i - i[:, None]))).sum(axis = 0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/409859.html
標籤:
