根据包含N(熊猫)的另一列,获取一列月份中的前一个月的N



我有一个数据帧,它有两列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以使其尽可能快的最佳方法是什么?

如果将值转换为月份周期,只需减去列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')

相关内容

  • 没有找到相关文章

最新更新