在 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
我有一个如下所示的数据框:
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