在Python中停止显示唯一ID时标记大型数据集

2024-10-06 07:02:42 发布

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

这是一个非常具体的问题,但我有一个超过1GB的大型数据集。此数据的格式如下所示:

Name         ID      OP Date      OP Hour        Gen         Heat
Jann         1       2001-01-01   1              10          0
Jann         1       2001-01-01   2              3           1
.
.
Jann         1       2001-01-01   24             13          3
Jann         2       2001-01-01   1              30          10
Jann         2       2001-01-01   3              32          11
.
.
Kay          1A      2002-01-01   1              0           12
Kay          1A      2002-01-01   2              2           22
.
.
.
.
.
Jann         1       2018-01-01   1              26          8
Jann         1       2018-01-01   2              32          21

有时Name会在某个时间出现,而不是在数据集(2001-01-01)的开头,和/或有时Name会在某个时间停止出现在数据集中

此外,有时会出现Name,但只有该Name中的某个ID会消失

我想知道这个数据集中的某个NameID何时开始和结束

例如Jann ID 1Jann ID 2都从OP Date 2001-01-01开始,但是Jann ID 2不会出现在OP Date 2018-01-01中。而且,Kay ID 1A2002-01-01开始,但在2018-01-01之前的某个地方停止出现

我希望的输出类似于数据帧:

Name         ID      OP Start Date     OP EndDate
Jann         1       2001-01-01        2018-01-01
Jann         2       2001-01-01        SOME OP DATE
Kay          1A      2002-01-01        SOME OP DATE

有没有一种方法可以轻松做到这一点


Tags: 数据nameiddate格式时间somegen
1条回答
网友
1楼 · 发布于 2024-10-06 07:02:42

您可以尝试使用groupby^{}(或者aggregate,这是相同的函数)在firstlast上为每个名称/ID组合应用OP Date。这要求df按操作日期排序(因此使用sort_values

# convert to datetime first if not done already
df['OP Date'] = pd.to_datetime(df['OP Date'])

df.sort_values('OP Date').groupby(['Name', 'ID'])['OP Date'].agg(['first', 'last'])


             first       last
Name ID                      
Jann 1  2001-01-01 2018-01-01
     2  2001-01-01 2001-01-01
Kay  1A 2002-01-01 2002-01-01

相关问题 更多 >