如何 select 数据框中的特定数据并删除所有其他数据?

How to select specific data in a dataframe and delete all other data?

我有一个数据框,其中有两列;代表一个组(数据类型:int64)和一个日期(数据类型:“0”)。我想提取每组数据的每个子集,其中包含最旧的日期,直到发布新日期为止。必须删除组的所有其他行。

DataFrame 示例:

import pandas as pd 
data = {'Col1':[1, 1, 1, 1, 1, 1, 1, 2, 2, 2 ], 'Col2':["2018-01-31", "2018-01-31", "2018-01-31", "2018-01-31", "2019-01-31", "2019-01-31", "2020-01-31", "2018-03-04", "2019-03-04", "2020-03-04"]}
df = pd.DataFrame(data)
print(df)

想要的结果:

data = {'Col1':[1, 1, 1, 1, 2 ], 'Col2':["2018-01-31", "2018-01-31", "2018-01-31", "2018-01-31", "2018-03-04"]}
df = pd.DataFrame(data)
print(df)

我真的希望有人知道如何做到这一点。提前致谢! :)

这与 非常相似,所以我将重用其中的方法,并在处理日期时间类型时做一些小改动。您需要 groupbymin

df_ = df.merge(pd.to_datetime(df['Col2']).groupby(df['Col1']).min()\
                 .astype(str).reset_index())

groupby.transform

s = pd.to_datetime(df['Col2'])
df_ = df.loc[s.groupby(df['Col1']).transform('min').eq(s)]

转换为日期时间、分组依据和排名:

df['Col2'] = pd.to_datetime(df['Col2'])
df['rank'] = df.groupby('Col1')['Col2'].rank(ascending=True,method='min')
df
    Col1    Col2    rank
0   1   2018-01-31  1.0
1   1   2018-01-31  1.0
2   1   2018-01-31  1.0
3   1   2018-01-31  1.0
4   1   2019-01-31  5.0
5   1   2019-01-31  5.0
6   1   2020-01-31  7.0
7   2   2018-03-04  1.0
8   2   2019-03-04  2.0
9   2   2020-03-04  3.0

您只想保留排名 1:

df = df.loc[df['rank']==1]