簡體   English   中英

在 dataframe 列中查找第二個最近的日期

[英]Find second most recent date in a dataframe column

我有數據例如:

  1. 采樣日期
  2. 2017 年 8 月 29 日
  3. 2017 年 8 月 29 日
  4. 2017 年 8 月 29 日
  5. 2016 年 2 月 28 日
  6. 2016 年 2 月 28 日
  7. 2014 年 5 月 15 日

等等..現在我可以找到最大和最小日期

df.Sampled_Date.max()
df.Sampled_Date.min()

但是如何找到第二個最近的日期。 即 Python 的 pandas 數據幀中的 2/28/2016。

確保您的日期首先在日期時間:

df['Sampled_Date'] = pd.to_datetime(df['Sampled_Date'])

然后刪除重復項,取nlargest(2) ,並取最后一個值:

df['Sampled_Date'].drop_duplicates().nlargest(2).iloc[-1]

# Timestamp('2016-02-28 00:00:00')

你也可以使用.argsort()

import pandas as pd

# Generate dates
dates = pd.Series(pd.date_range(start='1/1/2017', periods=5, freq=pd.offsets.MonthEnd(3)))

# Random order
dates = dates.sample(frac=1, random_state=0)

# Get the second 'max' date
dates[dates.argsort() == (len(dates)-2)] # 3   2017-10-31

我知道這是問題的延伸,但這是我經常需要的,有時會忘記,所以我在這里分享:

假設您不是只想要整個數據幀的第二個最近或第二個最早的日期,而是擁有用戶和日期的數據框,並且您希望獲得每個用戶的第二個最早日期(例如,他們的第二個交易)。

示例數據幀:

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]
# second more recent date
df.Sampled_Date.sort_values(ascending=False).iloc[1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM