根据每个ID有效过滤数据帧中最旧的记录

时间:2020-08-27 23:31:36

标签: python pandas dataframe

我有一个具有以下详细信息的数据框:

enter image description here

对于每个q_id,可能会有多个ph_id和不同的ph_date

我想用它来制作一个新的数据框,这样,每个q_id只有一个ph_id,并且是最旧的(日期最少)。

我尝试了以下代码,但我认为它的计算速度很慢:

def oldest_ph(q_id):
    return a.loc[a.ph_date == a[a['q_id'] == q_id].ph_date.min(), 'ph_date']

b['oldest_date'] = a['q_id'].apply(lambda x: a(x))

有什么更好的办法吗?

1 个答案:

答案 0 :(得分:1)

首先,让我们尝试为每个ph_id提取最早的q_id,然后使用map:

s = df.sort_values('date').drop_duplicates('q_id').set_index('q_id')
df['ph_id'] = df['q_id'].map(s['ph_id'])