[英]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.