python - 在 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
我想添加一列,表示自第一个以来的月x
数id
。完成的数据框应如下所示:
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
推荐阅读
- azure - qnamaker.ai 中锁定的“显示主动学习建议”按钮
- javascript - Google Apps 脚本 - 在数组公式中将单元格转换为 SHA256
- python-asyncio - 挂在python中的异步服务器
- python-3.x - 动态替换列表中的变量
- r - 从不是 R 中先前样本子集的数据帧中采样随机行
- javascript - 如何测试使用量角器进行 api 调用的多个点击事件
- docker - 在浏览器中显示更新并使用 Docker 为 Vue.js 部署点击刷新
- python - numpy.random 与 numpy.random.Generate 有什么区别
- node.js - 在 azure 的 nodejs express 应用程序中托管子 ASP 应用程序
- amazon-web-services - 水平 pod 缩放器 k8s 利用率不工作,但 Value/AverageValue 工作