【问题标题】:How to find earliest continuous date in dataframe using python?如何使用python在数据框中找到最早的连续日期?
【发布时间】:2020-11-09 00:26:59
【问题描述】:

您好,我有一个包含 3 列的数据框,如下所示。 我想使用Python Pandas 计算每个 Employee_ID 的最早“开始日期”。 例如 对于 Employee_ID SNC1289037 ,Start_Date 将是 1/1/2020 和 End_Date 将是 12/31/2999,因为在时间段内没有中断。 对于Employee_ID SNC2289038,Start_Date 将是 3/1/2020,End_Date 将是 12/31/2999,因为时间段中有一个中断。

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

非常感谢您的帮助。

【问题讨论】:

  • 请不要包含并非绝对需要成为图像的事物的图像。我们努力回答您的问题,请努力正确提供示例数据。
  • @Pandas——您的数据中是否需要像 12/31/2999 这样的日期?由于 Pandas 中的日期仅限于 64 位时间戳,因此在转换为日期对象时,这么大的日期会导致错误。意思是像 2199 年 12 月 31 日这样的日期就足够了吗?

标签: python pandas numpy dataframe datetime


【解决方案1】:

2999 年 12 月 31 日等日期会导致 Pandas 日期时间函数出现问题,即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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2021-08-16
    • 2015-07-11
    • 2021-07-21
    相关资源
    最近更新 更多