Python 如何使用pandas查找序列中缺少的日期行?

Python 如何使用pandas查找序列中缺少的日期行?,python,python-3.x,pandas,dataframe,pandas-groupby,Python,Python 3.x,Pandas,Dataframe,Pandas Groupby,我有一个超过400万行和30列的数据框。我只是提供了我的患者数据框的一个示例 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/

我有一个超过400万行和30列的数据框。我只是提供了我的患者数据框的一个示例

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) 获取每个受试者的
项目名称的计数

对于
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))
我希望我的输出如下所示


您可以通过以下方式获得第一部分:

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
编辑:

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

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


然后,您可以通过检查ID是否显示在此新帧中,将
seq status
添加到第一帧中。

您可以通过以下方式获得第一部分:

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
编辑:

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

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



然后,通过检查ID是否显示在此新帧中,您可以将
seq status
添加到第一帧中。

Hi,感谢您的回复。向上投票。对于第二部分,请参考示例数据框中的日期。我想得到每个主题缺少的日期是的,我确实看到了日期,但逻辑不清楚。我假设这些是13/01的欧洲格式,但如果主题3从1月11日开始,为什么丢失的日期都在11月?FWIW建议将所有这些转换为ISO日期格式,以使其明确。抱歉,已更新预期输出和示例数据帧。日期的格式为
日/月/年
对延迟表示歉意。回答:谢谢你的回复。向上投票。对于第二部分,请参考示例数据框中的日期。我想得到每个主题缺少的日期是的,我确实看到了日期,但逻辑不清楚。我假设这些是13/01的欧洲格式,但如果主题3从1月11日开始,为什么丢失的日期都在11月?FWIW建议将所有这些转换为ISO日期格式,以使其明确。抱歉,已更新预期输出和示例数据帧。日期的格式为
日/月/年
对延迟表示歉意。标记答案什么定义了丢失的日期?例如
subject_id=2只记录了日期1,3,8,9,10
。通过这一点,我们可以推断他的日期
2,4,5,6,7
记录缺失。如果你看到
subject\u id=1,你可以看到他/她连续有记录。他们的约会没有中断
。这就是为什么
Seq_status=Yes
表示他/她处于Sequence@Datanovice-更新了示例数据框和预期的输出。有微小的更改。@SSMK您想要缺少的日期,还是只需要它们的总数?缺少日期的定义是什么?例如
subject_id=2只记录了日期1,3,8,9,10
。通过这一点,我们可以推断他的日期
2,4,5,6,7
记录缺失。如果你看到
subject\u id=1,你可以看到他/她连续有记录。他们的约会没有中断
。这就是为什么
Seq_status=Yes
表示他/她处于Sequence@Datanovice-更新了示例数据框和预期的输出。有微小的更改。@SSMK您想要缺少的日期,还是只想要总数?