如何使用python在数据帧中查找最早的连续日期?

2024-10-02 00:21:50 发布

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

嗨,我有一个数据框,有3列,如下所示。 我想使用Python Pandas计算每个员工ID的最早“开始日期”。 例如 对于Employee_ID SNC1289037,开始日期将为1/1/2020,结束日期将为12/31/2999,因为时间段中没有中断。 对于Employee_ID SNC2289038,开始日期将为2020年1月3日,结束日期将为2999年12月31日,因为时间段中有一个中断

Employee_ID|Start_date | End_date
---------------------------------
SNC1289037  1/1/2020    1/31/2020
SNC1289037  2/1/2020    2/29/2020
SNC1289037  3/1/2020    3/30/2020 
SNC1289037  4/1/2020    12/31/2999 
SNC2289038  1/1/2020    1/31/2020
SNC2289038  3/1/2020    3/30/2020
SNC2289038  4/1/2020    12/31/2999
SNC4589038  1/1/2020    1/31/2020
SNC4589038  2/1/2020    2/29/2020
SNC4589038  3/1/2020    3/30/2020

非常感谢你的帮助


Tags: 数据idpandasdate员工employeestartend
1条回答
网友
1楼 · 发布于 2024-10-02 00:21:50

诸如2999年12月31日之类的日期会导致Datetime函数出现问题,即reference

假设:可以将日期限制在2199年12月31日(而不是2999年12月31日)

代码

# Data
s = '''Employee_ID Start_date End_date
SNC1289037 1/1/2020 1/31/2020
SNC1289037 2/1/2020 2/29/2020
SNC1289037 3/1/2020 3/30/2020
SNC1289037 4/1/2020 12/31/2199
SNC2289038 1/1/2020 1/31/2020
SNC2289038 3/1/2020 3/30/2020
SNC2289038 4/1/2020 12/31/2199
SNC4589038 1/1/2020 1/31/2020
SNC4589038 2/1/2020 2/29/2020
SNC4589038 3/1/2020 3/30/2020'''

# Data to Pandas DataFrame
from io import StringIO
df = pd.read_csv(StringIO(s), delim_whitespace=True)

# Convert date columns to dates
df['Start_date']= pd.to_datetime(df['Start_date'])
df['End_date']= pd.to_datetime(df['End_date'])

# Show Earliest Start date, and last End date by Group (using aggregate function)
df.groupby('Employee_ID').agg({'Start_date' : "min", 'End_date': "max"})

输出

            Start_date  End_date
Employee_ID     
SNC1289037  2020-01-01  2199-12-31
SNC2289038  2020-01-01  2199-12-31
SNC4589038  2020-01-01  2020-03-30

相关问题 更多 >

    热门问题