我有一個包含 MONTH 和 N 兩列的資料框。MONTH 采用 yyyy-mm 格式,N 是一個整數,用于指定 MONTH 需要回溯多遠。我正在尋找一種計算有效的方法來執行此操作,因為我的資料集很大(超過 50M 行)
這是一個例子:
df = pd.DataFrame({'MONTH':['2020-01', '2020-02', '2020-03', '2020-04'],
'N': [10,8,5,2]})
期望輸出:
MONTH N N_PREV_MONTH
0 2020-01 10 2019-03
1 2020-02 8 2019-06
2 2020-03 5 2019-10
3 2020-04 2 2020-02
我知道 MONTH 可以更改為 yyyy-mm-01 格式,然后再減去 N 個月。以矢量格式獲取 N_PREV_MONTH 以使其盡可能快的最佳方法是什么?
uj5u.com熱心網友回復:
如果將值轉換為月份,只需減去 column N:
df['MONTH'] = pd.PeriodIndex(df['MONTH'], freq='m')
df['N_PREV_MONTH'] = df['MONTH'].sub(df['N']).astype(str)
print(df)
MONTH N N_PREV_MONTH
0 2020-01 10 2019-03
1 2020-02 8 2019-06
2 2020-03 5 2019-10
3 2020-04 2 2020-02
較慢的替代方案:
df['MONTH'] = pd.to_datetime(df['MONTH'])
df['N_PREV_MONTH'] = df.apply(lambda x: x['MONTH'] - pd.offsets.DateOffset(months=x['N']), axis=1).dt.strftime('%Y-%m')
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/453955.html
