根据另一列的条件从 Pandas 数据框中删除重复项

时间:2021-03-01 23:21:14

标签: python pandas

我需要从以下 Pandas 数据框中删除具有相同 p_id 的重复行,但使用以下条件:

  1. 应给予包含时间戳变量的行最高保持优先权
  2. 如果有多行带有时间戳,则应将保留优先级赋予最新的行
  3. 如果所有重复实例不包含时间戳,则保持它们全部原样

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 

1 个答案:

答案 0 :(得分:0)

一种可能性是首先确定一个 id 的所有日期在哪里为空并与 .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
相关问题