如何在数据中保留第 t 周首次出现的个人的观察结果

How to keep observations for individuals who showed up for the first time in week t in the data

我有以下数据框:

   ID       date  X
0   A 2021-12-15  7
1   A 2022-01-30  6
2   A 2022-02-15  2
3   B 2022-01-30  2
4   B 2022-02-15  2
5   B 2022-02-18  7
6   C 2021-12-01  7
7   C 2021-12-15  4
8   C 2022-01-30  2
9   C 2022-02-15  7
10  D 2021-12-16  5
11  D 2022-01-30  4
12  D 2022-03-15  9

我想保留那些在一周内首次出现的 ID 的观察值,比如说,一年中的第 51 个(我想在以后更改此参数)。

例如,ID AD 在第 51 周首先出现在数据中,B 没有,C 在第 51 周出现,但不是第一次。 所以我只想在这个例子中保留与 AD.

有关的数据

如果week匹配变量week并且它是ID在DataFrame中第一次被Series.duplicated过滤,则得到ID值:

week = 50

df['date'] = pd.to_datetime(df['date'])

s = df.loc[df['date'].dt.isocalendar().week.eq(week) & ~df['ID'].duplicated(), 'ID']

或者:

df1 = df.drop_duplicates(['ID'])
s = df1.loc[df1['date'].dt.isocalendar().week.eq(week) ,'ID']

print (s)
0     A
10    D
Name: ID, dtype: object

最后由 ID 过滤 Series.isin and boolean indexing:

df = df[df['ID'].isin(s)]
print (df)
   ID       date  X
0   A 2021-12-15  7
1   A 2022-01-30  6
2   A 2022-02-15  2
10  D 2021-12-16  5
11  D 2022-01-30  4
12  D 2022-03-15  9