从熊猫数据框中获取具有最大日期的行

时间:2018-11-07 22:47:25

标签: python pandas

我有一个熊猫数据框,如下所示:

enter image description here

我想获取每个唯一的ID,即具有最大日期的行,以便最终结果看起来像这样:

enter image description here

我的日期列的数据类型为“对象”。我尝试过分组,然后尝试按以下方式获取最大值:

idx = df.groupby(['ID','Item'])['date'].transform(max) == df_Trans['date']
df_new = df[idx]

但是我无法获得期望的结果。在这个问题上的任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

idxmax

只要index是唯一的或不重复最大索引,就应该起作用。

df.loc[df.groupby('ID').date.idxmax()]

OP(已编辑)

只要最大值是唯一的就应该起作用。否则,您将获得等于最大行数的所有行。

df[df.groupby('ID')['date'].transform('max') == df['date']]

W-B转到解决方案

也是很好的解决方案。

df.sort_values(['ID', 'date']).drop_duplicates('date', keep='last')

答案 1 :(得分:0)

我的回答是对@piRSquared 的概括

  • manykey 表示需要映射的键(多对)

  • onekey 表示需要映射到的键(一对一)

  • sortkey 是可排序的键,它遵循 asc 设置为 True(作为 python 标准)

      def get_last(df:pd.DataFrame,manykey:list[str],onekey:list[str],sortkey,asc=True):
           return df.sort_values(sortkey,asc).drop_duplicates(subset=manykey, keep='last')[manykey+onekey]
    

在你的情况下,答案应该是

       get_last(df,["id"],["item"],"date")

请注意,我明确使用 onekey 是因为我想删除其余的键(如果它们在表中)并创建一个映射。

PS 如果这应该是评论而不是答案,请告诉我。 SO 新手