df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
min_row = df.loc[df.groupby('year')['close'].idxmin()]
end_date_min = df.iloc[min_row]['date']
start_date_min = end_date_min - pd.Timedelta(days=100)
mindf = df.loc[(df['date'] >= start_date_min) & (df['date'] <= end_date_min)]
tempdf = mindf.head(1).copy()
tempdf['date_start'] = start_date_min
tempdf['maxmin'] = 'min'
summ = summ.append(tempdf, ignore_index=True)
同一段代码不同问题时间缺失顺延问题:
start_date_min得出的日期有数据缺失,请问想顺延得到100天整的没有缺失的数据怎么修改代码,谢谢
根据你的描述,start_date_min 似乎是某个日期减去100天之后的结果,而你希望得到一个连续的100天数据序列,而不是一个离散的日期序列。为此,你可以使用 pd.date_range() 函数来生成一个连续的日期序列,然后使用 mindf 过滤出缺失的数据,最后使用 fillna() 函数来填充缺失值。
以下是修改后的代码:
import pandas as pd
import numpy as np
# 加载数据
df = pd.read_csv('your_file.csv')
# 将 'date' 列转换为 datetime 类型
df['date'] = pd.to_datetime(df['date'])
# 提取年份并找到每个年份的最小日期
df['year'] = df['date'].dt.year
min_rows = df.loc[df.groupby('year')['date'].idxmin()]
end_dates_min = df.iloc[min_rows]['date']
# 生成100天的日期序列
start_date_min = end_dates_min - pd.Timedelta(days=100)
date_range = pd.date_range(start=start_date_min, end=end_dates_min, freq='D')
# 过滤出缺失的数据
mindf = df.loc[(df['date'] >= start_date_min) & (df['date'] <= end_dates_min)]
mindf['date'] = mindf['date'].map(lambda x: pd.Timestamp(x) if x != 'nan' else np.nan) # 处理缺失值
filtered_mindf = mindf.dropna() # 过滤出非缺失值
# 填充缺失值
tempdf = filtered_mindf.head(1).copy()
tempdf['date'] = date_range.values[0]
tempdf['maxmin'] = 'min'
summ = summ.append(tempdf, ignore_index=True)
filtered_mindf['date'] = filtered_mindf['date'].map(lambda x: date_range[np.isfinite(x)]) # 将非缺失值替换为连续的日期序列
filtered_mindf['maxmin'] = 'min'
summ = summ.append(filtered_mindf, ignore_index=True)
这段代码首先使用 pd.date_range() 函数生成一个从 start_date_min 到 end_dates_min 的连续日期序列,然后过滤出缺失数据并使用 fillna() 函数填充缺失值。最后,将填充后的数据添加到 summ 数据框中。