python - 根据另一列的条件从 Pandas 数据框中删除重复项
问题描述
我需要p_id
从以下 Pandas 数据框中删除相同的重复行,但使用以下条件:
- 最高保留优先级应给予包含时间戳变量的行
- 如果存在多行带有时间戳,则应将保留优先级赋予最新的
- 如果所有重复实例不包含时间戳,请保持原样
p_id sex age timestamp
P1 M 23 2021-01-25 13:53:30
P4 M
P4 F 45
P1 M 19
P3 56
P3 F 34 2021-01-25 14:06:00
预期输出
p_id sex age timestamp
P1 M 23 2021-01-25 13:53:30
P4 M
P4 F 45
P3 F 34 2021-01-25 14:06:00
解决方案
一种可能性是首先确定一个 id 的所有日期都为 null 的位置,然后与 a 的结果连接.drop_duplicates
df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df.sort_values(['p_id','timestamp'], ascending=[True,False])
mask = df.groupby('p_id')['timestamp'].transform('count') == 0
all_nans = df[mask]
valid_dates = df[df['timestamp'].notna()].drop_duplicates('p_id', keep = 'first')
pd.concat([all_nans, valid_dates])
#output:
p_id sex age timestamp
0 P1 M 23.0 2021-01-25 13:53:30
5 P3 F 34.0 2021-01-25 14:06:00
1 P4 M NaN NaT
2 P4 F 45.0 NaT
推荐阅读
- python - 将真实值的索引过滤到列表中
- java - 在 spark Dataset s 可以作为输入 args 传递给函数以输出函数的 args 吗?
- javascript - 将可配置的 appInsights 密钥传递给 javascript (react/angular) 应用程序
- 3d - 使用低质量 GPU 的 Maya 3d 模型
- shell - 如何删除在unix文件中的两个位置具有两个模式的行
- html - 两个 CSS 网格未在同一个父容器内对齐
- r - R:R中的世界银行数据与导出到csv之间的数据不一致
- r - 为向量元素分配与前一个匹配值相关的值
- python - GP 回归模型为所有测试输入预测非常相似的数字
- java - Spring Boot在包含签名的jar文件时启动缓慢