Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在熊猫数据框中查找第二个最近日期_Python_Pandas - Fatal编程技术网

Python 在熊猫数据框中查找第二个最近日期

Python 在熊猫数据框中查找第二个最近日期,python,pandas,Python,Pandas,我有一些数据,例如: 抽样调查日期 2017年8月29日 2017年8月29日 2017年8月29日 2016年2月28日 2016年2月28日 2014年5月15日 等等。。 现在我可以找到最大和最小日期 df.Sampled_Date.max() df.Sampled_Date.min() 但是如何找到第二个最近的日期。 i、 e 2/28/2016,在Python的熊猫数据框架中 首先确保您的日期在datetime中: df['Sampled_Date'] = pd.to_datetim

我有一些数据,例如:

  • 抽样调查日期
  • 2017年8月29日
  • 2017年8月29日
  • 2017年8月29日
  • 2016年2月28日
  • 2016年2月28日
  • 2014年5月15日
  • 等等。。 现在我可以找到最大和最小日期

    df.Sampled_Date.max()
    df.Sampled_Date.min()
    
    但是如何找到第二个最近的日期。
    i、 e 2/28/2016,在Python的熊猫数据框架中

    首先确保您的日期在datetime中:

    df['Sampled_Date'] = pd.to_datetime(df['Sampled_Date'])
    
    然后放下重复项,取最大值(2),然后取该值的最后一个值:

    df['Sampled_Date'].drop_duplicates().nlargest(2).iloc[-1]
    
    # Timestamp('2016-02-28 00:00:00')
    

    首先确保您的日期在datetime中:

    df['Sampled_Date'] = pd.to_datetime(df['Sampled_Date'])
    
    然后放下重复项,取最大值(2),然后取该值的最后一个值:

    df['Sampled_Date'].drop_duplicates().nlargest(2).iloc[-1]
    
    # Timestamp('2016-02-28 00:00:00')
    

    您还可以使用
    .argsort()


    您还可以使用
    .argsort()


    我知道这是问题的延伸,但这是我经常需要的东西,有时会忘记,所以我在这里分享:

    比方说,您拥有一个包含用户和日期的数据框架,并且希望获得每个用户的第二个最早日期(例如,他们的第二个事务),而不是整个数据框架的第二个最新日期或第二个最早日期

    数据帧示例:

    test = pd.DataFrame()
    test['users'] = [1,2,3,2,3,2]
    test['dates'] = pd.to_datetime(['2019-01-01','2019-01-01',
                                    '2019-01-02','2019-01-02',
                                    '2019-01-03','2019-01-04'])
    
    用户2的最早日期为“2019-01-01”,第二早日期为“20-19-01-02”。我们可以使用groupby、apply和nlargest/nsmallest:

    test.groupby('users')['dates'].apply(lambda x: x.nsmallest(2).max())
    
    这给了我们这个输出:

    users
    1   2019-01-01
    2   2019-01-02
    3   2019-01-03
    Name: dates, dtype: datetime64[ns]
    

    我知道这是问题的延伸,但这是我经常需要的东西,有时会忘记,所以我在这里分享:

    比方说,您拥有一个包含用户和日期的数据框架,并且希望获得每个用户的第二个最早日期(例如,他们的第二个事务),而不是整个数据框架的第二个最新日期或第二个最早日期

    数据帧示例:

    test = pd.DataFrame()
    test['users'] = [1,2,3,2,3,2]
    test['dates'] = pd.to_datetime(['2019-01-01','2019-01-01',
                                    '2019-01-02','2019-01-02',
                                    '2019-01-03','2019-01-04'])
    
    用户2的最早日期为“2019-01-01”,第二早日期为“20-19-01-02”。我们可以使用groupby、apply和nlargest/nsmallest:

    test.groupby('users')['dates'].apply(lambda x: x.nsmallest(2).max())
    
    这给了我们这个输出:

    users
    1   2019-01-01
    2   2019-01-02
    3   2019-01-03
    Name: dates, dtype: datetime64[ns]