在 Pandas 中迭代计算月数

Calculate Number of Months Iteratively In 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

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

    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

如何实现?

您可以找到每个 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