Pandas嵌套循环生成过滤DataFrame无法存为独立变量,求Pythonic方案
实现方案
推荐最佳实践:用字典存储分组结果
不建议直接动态生成全局变量,会污染命名空间,后续也不方便批量遍历管理,用字典存储是更规范的做法,示例代码如下:
import pandas as pd path = r'C:/Users/Owner/_APP_Local/data' df = pd.read_csv(path + '/Data=X_yes.csv') # 定义空字典存储所有分组结果 grouped_dfs = {} # 嵌套分组 for name, name_df in df.groupby('Name'): for time_frame, tf_df in name_df.groupby('Time_Frame'): # 按要求的格式生成键 key = f"dataframe_{name}_{time_frame}" grouped_dfs[key] = tf_df # 验证输出可以保留 print(tf_df[['Date',"Name","Time_Frame"]])
使用时直接通过字典键访问即可,比如要调用Name为A、Time_Frame为2024的分组,直接写grouped_dfs['dataframe_A_2024']即可。
若确实需要生成独立全局变量
如果必须要生成dataframe_{Name}_{Time_Frame}格式的独立全局变量,可以通过globals()实现,代码如下:
import pandas as pd path = r'C:/Users/Owner/_APP_Local/data' df = pd.read_csv(path + '/Data=X_yes.csv') for name, name_df in df.groupby('Name'): for time_frame, tf_df in name_df.groupby('Time_Frame'): var_name = f"dataframe_{name}_{time_frame}" globals()[var_name] = tf_df print(tf_df[['Date',"Name","Time_Frame"]])
注意:该方式会在全局作用域生成大量变量,容易出现命名冲突、内存占用不易回收的问题,非必要不推荐使用。
原代码优化提示
原代码中循环变量名data、new_df存在重复赋值的问题,容易引发逻辑bug,建议按照上述示例对分组键和分组DataFrame使用明确的变量名区分。
内容的提问来源于stack exchange,提问作者Davis Rogers
相关产品推荐
相关产品推荐

