如何基于列名匹配关联List A的日期与List B的计算值?
嗨,很高兴能帮你搞定这个问题!根据你的描述,核心就是要把List A里的日期字段和List B中对应名称的计算值关联起来对吧?咱们一步步来实现:
第一步:先把两个List转成更易处理的DataFrame
首先,List A里每个元素是带日期索引的Series,List B是单个列的DataFrame列表,先把它们各自合并成完整的DataFrame:
处理List A
把List A合并成带Date列的DataFrame(原来的索引就是Date,我们把它转成列):
# 合并List_A为一个DataFrame,保留原日期索引 list_a_df = pd.concat(List_A, axis=1) # 将索引转为Date列 list_a_df = list_a_df.reset_index().rename(columns={'index': 'Date'})
处理List B
把List B里的小DataFrame合并成一个完整的宽表:
list_b_df = pd.concat(List_B, axis=1)
第二步:按列名匹配整合数据
因为两个表的列名是一一对应的(只是顺序不同),我们可以直接按列名把List B的数值和List A的Date整合到一起:
# 初始化结果表,先放入Date列 result_df = pd.DataFrame({'Date': list_a_df['Date']}) # 遍历List B的每一列 for col_name in list_b_df.columns: if col_name in list_a_df.columns: # 将对应列的cusum结果加入结果表 result_df[col_name] = list_b_df[col_name].values else: print(f"注意:列名 {col_name} 在List A中找不到匹配项")
小提示:检查数据长度匹配
这里要注意一个关键点:List A的每个Series是去掉了NaN的,而List B的cusum结果是基于original_df中每个page的全部数据生成的。如果两者行数不一致,可能会出现匹配错误。如果List A的NaN是需要保留的(只是计算时忽略),建议生成List A时不要drop NaN,而是保留完整的Date索引,这样就能和List B的行数完美对齐了,修改后的List A生成代码可以更简洁:
# 替代原来的循环,直接生成保留NaN的Series列表(如果需要保留完整日期) List_A = [df.iloc[:, i] for i in range(len(df.columns))]
这样处理后,result_df里就会包含你需要的Date字段,以及所有和List A列名匹配的List B计算数值啦!
内容的提问来源于stack exchange,提问作者AneesBaqir
相关产品推荐
相关产品推荐

