如何使用pandas找到序列中缺失日期行?

2024-04-25 16:46:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个超过4 million rows and 30 columns的数据帧。我只是提供了我的病人数据帧的一个样本

df = pd.DataFrame({
    'subject_ID':[1,1,1,1,1,2,2,2,2,2,3,3,3],
    'date_visit':['1/1/2020 12:35:21','1/1/2020 14:35:32','1/1/2020 16:21:20','01/02/2020 15:12:37','01/03/2020 16:32:12',
                 '1/1/2020 12:35:21','1/3/2020 14:35:32','1/8/2020 16:21:20','01/09/2020 15:12:37','01/10/2020 16:32:12',
                 '11/01/2022 13:02:31','13/01/2023 17:12:31','16/01/2023 19:22:31'],
    'item_name':['PEEP','Fio2','PEEP','Fio2','PEEP','PEEP','PEEP','PEEP','PEEP','PEEP','Fio2','Fio2','Fio2']})

我想做两件事

1)找出顺序中缺失的受试者及其记录

2)获得每个受试者的item_name计数

对于q2,这就是我所尝试的

df.groupby(['subject_ID','item_name']).count()  # though this produces output, column name is not okay. I mean why do it show the count value on `date_visit` column?

对于q1,这就是我正在尝试的

df['day'].le(df['shift_date'].add(1))

我希望我的输出如下所示

enter image description here


Tags: 数据nameiddfdatecountcolumnvisit
1条回答
网友
1楼 · 发布于 2024-04-25 16:46:38

您可以通过以下步骤获得第一部分:

In [14]: df.groupby("subject_ID")['item_name'].value_counts().unstack(fill_value=0)
Out[14]:
item_name   Fio2  PEEP
subject_ID
1              2     3
2              0     5
3              3     0

编辑:

我认为您的示例输出中的日期格式仍然有点混乱,强烈建议您将所有内容切换到iso8601标准,因为这样可以防止出现类似问题。pandas本身无法正确解析11/01/2022条目,因此我在示例中手动修复了它。你知道吗

使用我假设的这些日期,您可以通过分组和使用.resample()找到差距:

In [73]: df['dates'] = pd.to_datetime(df['date_visit'])

In [74]: df.loc[10, 'dates'] = pd.to_datetime("2022-01-11 13:02:31")

In [75]: dates = df.groupby("subject_ID").apply(lambda x: x.set_index('dates').resample('D').first())

In [76]: dates.index[dates.isnull().any(axis=1)].to_frame().reset_index(drop=True)
Out[76]:
   subject_ID      dates
0           2 2020-01-02
1           2 2020-01-04
2           2 2020-01-05
3           2 2020-01-06
4           2 2020-01-07
5           3 2022-01-12
6           3 2022-01-14
7           3 2022-01-15

然后可以通过检查ID是否显示在这个新帧中,将seq status添加到第一个帧中。你知道吗

相关问题 更多 >