首页 > 解决方案 > 在 Pandas 中迭代计算月数

问题描述

我有一个看起来像这样的数据框:

    id      date        x
0   15260   2020-01-22  1
1   15260   2020-06-13  6               
2   15801   2020-12-04  5                
3   23369   2021-01-01  4
4   15260   2020-10-13  3
5   15801   2021-01-04  1
6   23369   2021-02-05  1

我想添加一列,表示自第一个以来的月xid。完成的数据框应如下所示:

    id      date        x   y
0   15260   2020-01-22  1   1
1   15260   2020-06-13  6   6              
2   15801   2020-12-04  5   1                
3   23369   2021-01-01  4   1
4   15260   2020-10-13  3   10
5   15801   2021-01-04  1   2
6   23369   2021-02-05  1   2

如何做到这一点?

标签: pythonpandasnumpytime-seriesjupyter

解决方案


您可以找到每个 id 的最早日期并从每个日期中减去该值(分别为年和月,然后将增量组合成差异月数):

z = df.groupby('id')['date'].transform('min')
df['y'] = (
    (df['date'].dt.year - z.dt.year)*12 +
    (df['date'].dt.month - z.dt.month)
    + 1)
df

输出:

      id       date  x   y
0  15260 2020-01-22  1   1
1  15260 2020-06-13  6   6
2  15801 2020-12-04  5   1
3  23369 2021-01-01  4   1
4  15260 2020-10-13  3  10
5  15801 2021-01-04  1   2
6  23369 2021-02-05  1   2

推荐阅读