这是一个非常具体的问题,但我有一个远远超过 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
将不再出现在数据集在某个OP Date
集中在一起。
此外,有时会出现名称
,但只有该名称
中的某个ID
会消失。
我希望能够知道此数据中的某个Name
和ID
何时开始和结束设置。
例如,Jann ID 1
和 Jann ID 2
均从 OP Date 2001-01-01
开始,但 Jann ID 2
未显示在 OP Date 2018-01-01
中。此外,Kay ID 1A
于 2002-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
有没有办法轻松做到这一点?
最佳答案
您可以尝试groupby
和agg
(或aggregate
,它是相同的函数)在每个名称/的OP Date
上应用first
和last
身份证组合。这要求 df 按 OP 日期排序(因此使用 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
关于python - 当 Python 中不再显示唯一 ID 时标记大型数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54560498/