如何基于另一DataFrame的区间值拆分DataFrame并自动命名子表
解决方案
方法1:直接生成全局变量(满足你的自动命名需求)
你之前的代码无法生效是因为仅修改了局部变量name的值,没有在全局命名空间中创建对应名称的变量,可以通过globals()方法实现:
for i in range(len(df_segment_list)): globals()[f"df_segment_{i}"] = df_segment_list[i]
运行后即可直接使用df_segment_0、df_segment_1等变量进行后续计算,比如:
df_segment_0 = df_segment_0.assign(col_3 = df_segment_0["Col_1"] / df_segment_0["Col_2"])
方法2:用字典存储(更规范,推荐使用)
直接生成全局变量容易造成命名空间污染,也不便于后续批量处理所有子表,更推荐用字典存储所有拆分后的DataFrame:
df_seg_dict = {} for idx, seg_df in enumerate(df_segment_list): df_seg_dict[f"df_segment_{idx}"] = seg_df
后续访问方式如下:
# 单独访问单个子表 df_seg_dict["df_segment_0"] = df_seg_dict["df_segment_0"].assign(col_3 = df_seg_dict["df_segment_0"]["Col_1"] / df_seg_dict["df_segment_0"]["Col_2"]) # 批量处理所有子表 for seg_name, seg_df in df_seg_dict.items(): df_seg_dict[seg_name] = seg_df.assign(col_3 = seg_df["Col_1"] / seg_df["Col_2"])
额外优化:区间拆分代码优化
你之前用try-except跳过最后一个索引的写法可以优化,直接遍历区间边界的相邻元素即可,不会触发报错:
seg_heights = df_segments["Section Height"].tolist() df_segment_list = [] # 遍历相邻的区间起止值 for start, end in zip(seg_heights[:-1], seg_heights[1:]): filter_mask = (df["Height"] >= start) & (df["Height"] < end) df_segment = df.loc[filter_mask, ["Height", "Col_1", "Col_2"]] df_segment_list.append(df_segment)
内容的提问来源于stack exchange,提问作者Stefan Panajotovic
相关产品推荐
相关产品推荐

