如何在数据中保留第 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 A
和 D
在第 51 周首先出现在数据中,B
没有,C
在第 51 周出现,但不是第一次。
所以我只想在这个例子中保留与 A
和 D
.
有关的数据
如果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
我有以下数据框:
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 A
和 D
在第 51 周首先出现在数据中,B
没有,C
在第 51 周出现,但不是第一次。
所以我只想在这个例子中保留与 A
和 D
.
如果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