-
需求
-
代码
-
path = r’文件路径’
-
def get_df_open_inteval(path): # 获取数据 df = pd.read_csv(path,encoding='gbk') # 取相关数据 df1 = df[['时间','申卖价1']] # 把申卖价大于0的变为1 df1['申卖价1'][df1['申卖价1'] > 0] = 1 # 新增一列,用shift函数向下移动一步 df1['shift_value'] = df1['申卖价1'].shift() # 把NaN变为1 df1 = df1.fillna(1) # shift_value改变类型 df1['shift_value'] = df1['shift_value'].astype('int64') # 取申卖价1为0,shift_value为1的时间,这是开始的时间 result1 = list(df1[(df1['申卖价1'] == 0) & (df1['shift_value'] == 1)]['时间']) # 取申卖价1为1,shift_value为0的时间,这是结束的时间 result2 = list(df1[(df1['申卖价1'] == 1) & (df1['shift_value'] == 0)]['时间']) # 这里判断最后一段如果没有结束时间就直接取最后的 if len(result1)!=len(result2): result2.append(df1.iloc[-1]['时间']) # 循环得到一个list,元素是元组 res_list = [] for i in range(len(result1)): res_list.append((result1[i],result2[i])) return res_list
-
循环的写法
-
time_tuple = [] i = 0 while i<len(df1): cnt=0 while df1['申卖价1'][i] == 0: cnt += 1 if cnt == 1: begin = df1['时间'][i] i += 1 if i == 3170: break if df1['申卖价1'][i-1] == 0: end = df1['时间'][i-1] time_tuple.append((begin,end)) i += 1