pandas - 在熊猫数据框中计算与不同值交错的重复项
问题描述
这是我的数据的一个非常简化的版本:
╔═════════╤═══════════╗
║ user_id │ module_id ║
╠═════════╪═══════════╣
║ 1 │ 1 ║
╟─────────┼───────────╢
║ 1 │ 1 ║
╟─────────┼───────────╢
║ 1 │ 2 ║
╟─────────┼───────────╢
║ 1 │ 1 ║
╟─────────┼───────────╢
║ 2 │ 2 ║
╟─────────┼───────────╢
║ 2 │ 1 ║
╟─────────┼───────────╢
║ 2 │ 2 ║
╟─────────┼───────────╢
║ 2 │ 2 ║
╟─────────┼───────────╢
║ 2 │ 1 ║
╟─────────┼───────────╢
║ 2 │ 2 ║
╚═════════╧═══════════╝
这是我想添加的专栏:
╔═════════╤═══════════╤════════════════════╗
║ user_id │ module_id │ repeated_module_id ║
╠═════════╪═══════════╪════════════════════╣
║ 1 │ 1 │ NaN ║
╟─────────┼───────────┼────────────────────╢
║ 1 │ 1 │ NaN ║
╟─────────┼───────────┼────────────────────╢
║ 1 │ 2 │ NaN ║
╟─────────┼───────────┼────────────────────╢
║ 1 │ 1 │ 1 ║
╟─────────┼───────────┼────────────────────╢
║ 2 │ 2 │ NaN ║
╟─────────┼───────────┼────────────────────╢
║ 2 │ 1 │ NaN ║
╟─────────┼───────────┼────────────────────╢
║ 2 │ 2 │ 2 ║
╟─────────┼───────────┼────────────────────╢
║ 2 │ 2 │ NaN ║
╟─────────┼───────────┼────────────────────╢
║ 2 │ 1 │ 1 ║
╟─────────┼───────────┼────────────────────╢
║ 2 │ 2 │ 2 ║
╚═════════╧═══════════╧════════════════════╝
即,如果用户之前完成了一个模块,但之前没有完成,则重复该模块。
我想要一种矢量化的熊猫方式来推导它,但我不知道如何开始。
解决方案
IIUC,你可以试试:
df=df.assign(repeated_module_id=df.loc[df.groupby('user_id')['module_id'].apply(lambda x:
x.ne(x.shift())&x.duplicated()),'module_id'])
user_id module_id repeated_module_id
0 1 1 NaN
1 1 1 NaN
2 1 2 NaN
3 1 1 1.0
4 2 2 NaN
5 2 1 NaN
6 2 2 2.0
7 2 2 NaN
8 2 1 1.0
9 2 2 2.0
推荐阅读
- laravel - 如何在 swagger-php 数组中上传文件
- amazon-web-services - beantalk 使用哪个目录来部署我的代码?
- python - 欠采样numpy数组
- javascript - 使不同长度的文本以相同的速度滚动
- python - Keras模型的输出维度
- swift - 如何阻止视图在 SwiftUI 中出现动画?
- amazon-web-services - 允许从 Amazon EC2 实例跨账户访问 Amazon S3 存储桶
- python - 如何在 Linux 的 Windows 子系统中安装 Python 模块?
- html - 如何按类选择奇数/偶数元素,不是兄弟姐妹?
- java - Api 在 Keycloak 降级时抱怨 no-referrer-when-downgrade