我需要从以下 Pandas 数据框中删除具有相同 p_id
的重复行,但使用以下条件:
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
答案 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