簡體   English   中英

將日期轉換為 pandas 中的日期范圍的方法?

[英]Way to turn dates into a date range in pandas?

如果您有基於條件的日期列表,例如:

df

date                  random_values
2020-03-01                   1
2020-03-02                   2
2020-03-03                   2
2020-04-01                   8
2020-04-02                   9 
2020-04-03                   10
2020-05-01                   7
2020-05-02                   8 
2020-05-03                   10
2020-05-04                   20

前條件:df['date'].where(df.random_values >= 8)

這將產生以下日期:

2020-04-01                   
2020-04-02                    
2020-04-03
2020-05-02                    
2020-05-03 
2020-05-04

例如,雖然這個日期數量很好,但我的數據有數百個日期。 我想減少日期,所以它產生一個類似於這樣的 output:

2020-04-01: 2020-04-03
2020-05-01: 2020-05-04 

我只是想減少日期的數量並使它們輕松進入日期范圍。 有什么簡單的方法可以做到這一點?

假設df.date是一個正確的datetime時間列,並且您已經查詢了所需的dates

df.date = pd.to_datetime(df.date)
dates = df.date.where(df.random_values >= 8)

您可以通過加入每個月的第一個和最后一個日期.iloc[[0,-1]]groupby(dates.dt.month)apply()您的自定義 output 格式:

dates.groupby(dates.dt.month).apply(
    lambda month: ': '.join(month.iloc[[0,-1]].astype(str)))

# date
# 4.0    2020-04-01: 2020-04-03
# 5.0    2020-05-02: 2020-05-04
# Name: date, dtype: object

也試試這個:

df = pd.read_clipboard()

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

s  = df.loc[df['random_values'] >= 8, 'date']
grp = (s.diff() != pd.Timedelta(days=1)).cumsum()

s.groupby(grp).agg(lambda x: f"{x.iloc[0].strftime('%Y-%m-%d')}: {x.iloc[-1].strftime('%Y-%m-%d')}")

Output:

date
1    2020-04-01: 2020-04-03
2    2020-05-02: 2020-05-04
Name: date, dtype: object

暫無
暫無

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

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