Python 获取与每个ID关联的具有最小日期的行

Python 获取与每个ID关联的具有最小日期的行,python,python-3.x,pandas,date,Python,Python 3.x,Pandas,Date,我有一个带有多个ID的pandas数据框,其他列有一个日期列,上面写着:“date1”。我想获得所有与所有ID关联的具有最小日期的行。其他列的值也应保留 我所拥有的: ID date1 value 1 1/1/2013 a 1 4/1/2013 a 1 8/3/2014 b 2 11/4/2013 a 2 19/5/2016 b 2 8/4/2017 b 我想要的输出: ID date1

我有一个带有多个ID的pandas数据框,其他列有一个日期列,上面写着:“date1”。我想获得所有与所有ID关联的具有最小日期的行。其他列的值也应保留

我所拥有的:

ID   date1        value
1    1/1/2013     a
1    4/1/2013     a
1    8/3/2014     b
2    11/4/2013    a
2    19/5/2016    b
2    8/4/2017     b
我想要的输出:

ID   date1      value
1    1/1/2013   a
2    11/4/2013  a

谢谢

假设您在
ID
中有ID,在
DATE
中有日期:

df.groupby('ID')['DATE'].min()
按ID分组,然后选择每个组中的最小值。返回一个序列。如果需要该数据帧,请在输出上调用
.reset\u index()


如果您只想选择最小的行,我会将输出设置为键,然后
new_df.join(old_df.set_index(['ID','DATE'])
而不是处理一些基于索引的恶作剧。

假设您在
ID
中有ID,在
DATE
中有日期:

df.groupby('ID')['DATE'].min()
按ID分组,然后选择每个组中的最小值。返回一个序列。如果需要该序列的数据帧,请在输出上调用
.reset\u index()


如果您只想选择最小的行,我会将输出设置为键,然后
new_df.join(old_df.set_index(['ID','DATE'])
而不是处理一些基于索引的骗局。

使用
排序值
删除ID子集的重复项

df['date1'] = pd.to_datetime(df['date1'])
df.sort_values('date1').drop_duplicates('ID')
输出:

   ID      date1 value
0   1 2013-01-01     a
3   2 2013-11-04     a

对ID子集使用
排序\u值
删除重复项

df['date1'] = pd.to_datetime(df['date1'])
df.sort_values('date1').drop_duplicates('ID')
输出:

   ID      date1 value
0   1 2013-01-01     a
3   2 2013-11-04     a
转换为日期时间:

df = df.assign(date1 = pd.to_datetime(df.date1))
获取最小值和子集的标签索引:

df.loc[df.groupby("ID").date1.idxmin()]

   ID      date1 value
0   1 2013-01-01     a
3   2 2013-11-04     a
转换为日期时间:

df = df.assign(date1 = pd.to_datetime(df.date1))
获取最小值和子集的标签索引:

df.loc[df.groupby("ID").date1.idxmin()]

   ID      date1 value
0   1 2013-01-01     a
3   2 2013-11-04     a