根据包含 N (pandas) 的另一列获取一列月份的前 N 个月
Get the N previous month of a column of months based on another column which contains N (pandas)
我有一个包含两列 MONTH 和 N 的数据框。MONTH 采用 yyyy-mm 格式,N 是一个整数,指定 MONTH 需要回溯多远。我正在寻找一种计算效率高的方法来执行此操作,因为我的数据集很大(超过 5000 万行)
这里有一个例子:
df = pd.DataFrame({'MONTH':['2020-01', '2020-02', '2020-03', '2020-04'],
'N': [10,8,5,2]})
desired_output:
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 以使其尽可能快的最佳方法是什么?
如果将值转换为月份,只需减去列 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')
我有一个包含两列 MONTH 和 N 的数据框。MONTH 采用 yyyy-mm 格式,N 是一个整数,指定 MONTH 需要回溯多远。我正在寻找一种计算效率高的方法来执行此操作,因为我的数据集很大(超过 5000 万行)
这里有一个例子:
df = pd.DataFrame({'MONTH':['2020-01', '2020-02', '2020-03', '2020-04'],
'N': [10,8,5,2]})
desired_output:
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 以使其尽可能快的最佳方法是什么?
如果将值转换为月份,只需减去列 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')