用for循环处理Pandas DataFrame实现多时间区间价格差值计算
实现方案
用字典存储计算结果完全可以满足需求,完整可运行代码如下:
import pandas as pd # 原始数据定义 data = pd.DataFrame([['2021-11-16','250'],['2021-11-17','225'],['2021-11-18','200'],['2021-11-19','175'],['2021-11-20','150'],['2021-11-21','125']], columns = ['export_date','price']) curr_price = 100 cutoffs = [2,4,6] # 数字到英文的映射,用于生成指定格式的表头 num_to_en = {2:'two', 4:'four', 6:'six'} # 数据预处理,避免后续计算报错 data['export_date'] = pd.to_datetime(data['export_date']) data['price'] = pd.to_numeric(data['price']) max_date = data['export_date'].max() res_dict = {} for c in cutoffs: # 筛选对应时间区间内的数据 filter_mask = data['export_date'] >= max_date - pd.Timedelta(days=c) # 计算区间价格中位数 period_median = data.loc[filter_mask, 'price'].median() # 计算百分比差值并存入字典 pct_diff = (curr_price - period_median) / period_median res_dict[f"{num_to_en[c]}_day"] = round(pct_diff, 1) # 字典直接转成单行DataFrame result = pd.DataFrame([res_dict]) print(result)
逻辑说明
- 字典的key对应最终输出的列名,value存储对应区间的计算结果,转换为DataFrame时天然生成单行结构,符合输出要求
- 可根据实际需求调整小数保留位数、列名生成规则等参数
内容的提问来源于stack exchange,提问作者bonkus
相关产品推荐
相关产品推荐

