如何将DataFrame中多列分别与date列配对生成子数据框
解决方法:用字典存储子DataFrame(推荐)
你的问题在于循环里只是重新赋值了变量i,并没有把每个配对后的子DataFrame以对应Var的名字保存下来——每次循环都会覆盖i的内容,最后只留下最后一列的结果。
最规范且易维护的方式是用字典来存储所有子DataFrame,这样既能通过列名快速访问,也不会污染全局命名空间:
# 初始化空字典用于存储子DataFrame var_subsets = {} # 遍历所有列,跳过date列本身 for col_name in df.columns: if col_name != "date": # 提取date和当前列的子集,用copy避免后续修改原DataFrame时影响子集 var_subsets[col_name] = df[["date", col_name]].copy()
之后你就可以通过键名访问对应的子DataFrame,比如var_subsets["Var_1"]就能拿到Var_1和date的配对数据。
可选:创建单独命名的变量(不推荐)
如果一定要生成df_Var_1、df_Var_2这类单独的变量,可以用globals()函数,但这种方式会让变量分散在全局空间,当Var列很多时很难管理,所以不建议:
for col_name in df.columns: if col_name != "date": # 生成以"df_"开头的变量名,比如df_Var_1 globals()[f"df_{col_name}"] = df[["date", col_name]].copy()
运行后你就能直接调用df_Var_1、df_Var_2等变量了。
原代码失效的原因
你原来的循环里,i一开始是列名的字符串(比如"Var_1"),然后执行i = df.loc[:, ['date', i]]时,只是把i这个变量重新赋值成了对应的子DataFrame,但这个赋值只会覆盖当前循环的i值,循环结束后i只会保留最后一次循环的结果,并没有把每个子DataFrame都保存下来。
内容的提问来源于stack exchange,提问作者maaniB
相关产品推荐
相关产品推荐

