如何保留最新值并删除列中的所有其他值(pandas)

ano*_*ous 2 python formatting row dataframe pandas

我正在尝试获取最新出现的ID名称,并且我想删除在此之前发生的所有其他事件.

    ID Name     Comment        Time
0     W12D0       Fine     12:17:37
1     W12D0     Random     12:20:10
2     W12D0       What     12:21:06
3     W12D4       Fine     08:20:14
4     W12D5     Random     10:11:12
5     W12D5       Fine     11:37:02
..      ...        ...         ....
Run Code Online (Sandbox Code Playgroud)

例如(根据上面的数据),'ID Name',' W12D0 '与3次出现有关:12:17:37,12:20:10,12:21: 06

我想只保留与该ID Name的最新时间相关联的行(在这种情况下,它是12:21:06).W12D0的每一行都将被删除.基本上,我想要这样的东西:

    ID Name     Comment        Time
0     W12D0       What     12:21:06
1     W12D4       Fine     08:20:14
2     W12D5       Fine     11:37:02
..      ...        ...         ....
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

daz*_*ler 7

更新的版本(截至 2018 年 8 月)如下所示:

df = df.sort_values(by=['IDName', 'Time'])
df.drop_duplicates(subset=['IDName'], keep='last')
Run Code Online (Sandbox Code Playgroud)

以防万一有人遇到这个并努力让它工作


Sko*_*peo 6

如果"df"是您的数据框,而"IDName"是该列,那么您可以尝试:

首先你排序:

df = df.sort(columns=["IDName", "Time"])
Run Code Online (Sandbox Code Playgroud)

然后删除重复:

  df.drop_duplicates(subset=["IDName"], take_last=False)
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读更多:http: //pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html


小智 4

又快又脏,但应该可以完成这项工作!

import pandas as pd
import numpy as np

# load your data

data['Time'] = pd.to_datetime(data['Time'])

list_of_indexes = [np.argmin(g['Time']) for l, g in data.groupby('ID Name')]
data.ix[list_of_indexes]
Run Code Online (Sandbox Code Playgroud)