如何保留最新值并删除列中的所有其他值 (pandas)
How to keep the most recent values and delete all other others in a column (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
.. ... ... ....
例如(根据上面的数据),'ID Name','W12D0',与 3 次出现相关联:
12:17:37 , 12:20:10 , 12:21:06
我只想保留与该 ID 名称的最新时间关联的行(在本例中,它是 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
.. ... ... ....
我该怎么做?
快速而肮脏,但应该可以完成这项工作!
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]
这应该会执行您想要的操作。我通常使用 CSV 格式加载数据。
from pandas import *
import numpy as np
# load your data
df = read_cv('data.csv')
df['Time'] = to_datetime(df['Time'])
# remove duplicate
df = df.groupby('IDName', group_keys=False).apply(lambda x: x.ix[np.argmax(x['Time'])])
这篇 link 可能对您也有帮助:remove duplicate
如果 "df" 是您的数据框并且 "IDName" 列那么您可以尝试:
首先排序:
df = df.sort(columns=["IDName", "Time"])
然后删除重复项:
df.drop_duplicates(subset=["IDName"], take_last=False)
您可以在这里阅读更多内容:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html
更新的版本(截至 2018 年 8 月)如下所示:
df = df.sort_values(by=['IDName', 'Time'])
df.drop_duplicates(subset=['IDName'], keep='last')
以防万一有人遇到这个问题并努力让它工作
我正在尝试获取最近一次出现的 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
.. ... ... ....
例如(根据上面的数据),'ID Name','W12D0',与 3 次出现相关联: 12:17:37 , 12:20:10 , 12:21:06
我只想保留与该 ID 名称的最新时间关联的行(在本例中,它是 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
.. ... ... ....
我该怎么做?
快速而肮脏,但应该可以完成这项工作!
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]
这应该会执行您想要的操作。我通常使用 CSV 格式加载数据。
from pandas import *
import numpy as np
# load your data
df = read_cv('data.csv')
df['Time'] = to_datetime(df['Time'])
# remove duplicate
df = df.groupby('IDName', group_keys=False).apply(lambda x: x.ix[np.argmax(x['Time'])])
这篇 link 可能对您也有帮助:remove duplicate
如果 "df" 是您的数据框并且 "IDName" 列那么您可以尝试:
首先排序:
df = df.sort(columns=["IDName", "Time"])
然后删除重复项:
df.drop_duplicates(subset=["IDName"], take_last=False)
您可以在这里阅读更多内容: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html
更新的版本(截至 2018 年 8 月)如下所示:
df = df.sort_values(by=['IDName', 'Time'])
df.drop_duplicates(subset=['IDName'], keep='last')
以防万一有人遇到这个问题并努力让它工作