簡體   English   中英

檢查 pandas 列中的日期是否按順序

[英]Check if dates are in sequence in pandas column

如果我有數據框:

Class   Dates
1       2022.01.12   
2       2022.01.13
3       2022.01.15
4       2022.01.20
5       2022.01.21
6       2022.01.22
7       2022.01.22

我想得到

Class   Dates          Notes
1       2022.01.12      Min
2       2022.01.13      Max
3       2022.01.15     Singledate
4       2022.01.20      Min
5       2022.01.21
6       2022.01.22
7       2022.01.22       Max
8       2022.01.30     Singledate

注釋欄包含期間信息。 如果有一個時間范圍期間(如果日期是連續的則標記為),那么將 min 放在第一天,將 max 放在期間的末尾。 如果它只有一個日期/沒有連續的日期,那么寫“singledate”。

嘗試用此代碼填充“注釋”,但似乎無處可去並卡住了

for idx, dates in df['Dates]:
    df['Notes']='min
    if df['Dates'].diff() == 1 :
       df['Notes']=''
    elif :
        df['Notes']='single'
        df['Notes'][idx-1] = 'max'
import pandas as pd

    
df['Dates'] = pd.to_datetime(df['Dates'], errors='raise')
df['Dif'] = df['Dates'].diff().dt.days
df['Dif'] = df['Dif'].replace(0, 1)
df['Notes'] = ''

def my_func(x):
    a = df[x:][df.loc[x:, 'Dif'] != 1]
    if len(a) > 0:
        df.loc[[x - 1, a.index[0] - 1], 'Notes'] = ['Min', 'Max']
        df.loc[x - 1 : a.index[0] - 1, 'Dif'] = 1
    else:
        df.loc[[x - 1, len(df) - 1], 'Notes'] = ['Min', 'Max']
        df.loc[x - 1 : len(df) - 1, 'Dif'] = 1


aaa = [my_func(i) for i in range(1, len(df)) if df.loc[i - 1, 'Dif'] != df.loc[i, 'Dif'] and df.loc[i, 'Dif'] == 1]

df.loc[df[df['Dif'] != 1].index, 'Notes'] = 'Singledate'

print(df)

輸出

   Class      Dates  Dif       Notes
0      1 2022-01-12  1.0         Min
1      2 2022-01-13  1.0         Max
2      3 2022-01-15  2.0  Singledate
3      4 2022-01-20  1.0         Min
4      5 2022-01-21  1.0            
5      6 2022-01-22  1.0            
6      7 2022-01-22  1.0         Max
7      8 2022-01-30  8.0  Singledate

“日期”列被轉換為日期格式。 創建一個“差異”列,其中包含天數差異。 0 替換為 1。

我使用列表理解,因為它比循環快很多倍。 列表理解檢查條件:current 'Dif' = 1, past is not equal to current. 當條件被觸發時,調用一個函數,通過loc填充所需的值。 最后,填充了“Singledate”的行。

暫無
暫無

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

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