You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中循环生成不同长度DataFrame的追加合并方法求助

解决循环中合并多个DataFrame的问题

你原来的代码问题在于直接给table的列赋值会覆盖原有数据,而不是追加。要实现类似SQL UNION的效果,推荐以下两种高效方法:

方法一:先收集所有子DataFrame,最后一次性合并(推荐)

这种方式性能更优,尤其是循环次数多或数据量大时,避免多次重复合并操作。

import pandas as pd
# 假设你用sklearn做线性回归,根据实际情况替换
from sklearn.linear_model import LinearRegression

# 初始化空列表用于存储每个循环生成的子DataFrame
dfs_list = []

for x in ['a', 'b', 'c']:
    for y in ['d', 'e', 'f']:
        # 过滤数据
        filtered_df = df[(df['col_1'] == x) & (df['col_2'] == y)]
        # 跳过空数据,避免后续报错
        if filtered_df.empty:
            continue
        
        s1 = filtered_df['col_3']
        # 这里替换成你实际的线性回归逻辑,生成和s1长度一致的预测序列s2
        # 示例:用col_3作为特征训练模型生成预测(仅作演示,根据你的数据调整)
        model = LinearRegression()
        X = s1.values.reshape(-1, 1)
        target = s1.values  # 替换为你的真实目标变量
        model.fit(X, target)
        s2 = model.predict(X)
        
        # 生成当前循环的子DataFrame
        current_df = pd.DataFrame({
            'col_x': [x] * len(filtered_df),
            'col_y': [y] * len(filtered_df),
            'col_3': s1,
            'predict': s2
        })
        # 将子DataFrame加入列表
        dfs_list.append(current_df)

# 合并所有子DataFrame,ignore_index重置索引
final_table = pd.concat(dfs_list, ignore_index=True)

方法二:每次循环直接追加到主DataFrame

如果循环次数少,也可以每次循环合并,但性能略差于方法一:

import pandas as pd
from sklearn.linear_model import LinearRegression

# 初始化空的主DataFrame
final_table = pd.DataFrame(columns=['col_x', 'col_y', 'col_3', 'predict'])

for x in ['a', 'b', 'c']:
    for y in ['d', 'e', 'f']:
        filtered_df = df[(df['col_1'] == x) & (df['col_2'] == y)]
        if filtered_df.empty:
            continue
        
        s1 = filtered_df['col_3']
        # 生成s2的逻辑同上
        model = LinearRegression()
        X = s1.values.reshape(-1, 1)
        target = s1.values
        model.fit(X, target)
        s2 = model.predict(X)
        
        current_df = pd.DataFrame({
            'col_x': [x] * len(filtered_df),
            'col_y': [y] * len(filtered_df),
            'col_3': s1,
            'predict': s2
        })
        # 追加到主DataFrame
        final_table = pd.concat([final_table, current_df], ignore_index=True)

关键注意事项

  • 必须处理filtered_df为空的情况,否则会生成空的子DataFrame,影响最终结果。
  • 确保每个子DataFrame的列名和主DataFrame完全一致,否则合并后会出现缺失值(NaN)。
  • 如果s2是pandas.Series类型,可以直接赋值给current_df的列,无需转成数组。

内容的提问来源于stack exchange,提问作者Horaci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:15:30