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

如何横向拼接循环生成的行数不同的DataFrame且不丢失数据?

问题描述

原始数据

原始数据表格

当前代码

new=[]
for i in range(1,len(dfnew.columns)-1, 1):
    x = np.array(df.iloc[:, i].fillna(0))
    y = np.array(df.iloc[:, i+1].fillna(0))
    distance,path = fastdtw(x, y, dist = euclidean)
    for j in range(0,len(path)):
        new.append([dfnew['Time'].iloc[path[j][0]],dfnew.iloc[:,i].iloc[path[j][0]], dfnew.iloc[:,i+1].iloc[path[j][1]]])
        df_sync = pd.DataFrame(data=new,columns=["Time"+ str(i),"Jolt"+ str(i), "Jolt"+str(i+1)]).dropna()
    
        #df_sync = pd.concat([new, df_sync], axis=1)
    print(df_sync) 

需求说明

遍历主DataFrame,计算Jolt 1与Jolt 2的欧氏路径(返回路径列表),生成包含Time、Jolt 1、Jolt 2列的DataFrame;下一轮循环计算Jolt 2与Jolt 3的路径,生成包含Time、Jolt 2、Jolt 3列的DataFrame。最终需要将这些DataFrame横向拼接,且不丢失任何信息。

当前输出

当前输出结果

解决方案

核心调整点

  • 避免复用全局列表存储多轮数据,每轮循环生成独立的同步数据集
  • 把每轮生成的DataFrame存入统一列表,循环结束后一次性完成横向拼接
  • 优化列名命名规则,避免混淆

修改后代码

# 初始化列表存储每轮生成的同步DataFrame
sync_dfs = []

for i in range(1, len(dfnew.columns)-1):
    x = np.array(df.iloc[:, i].fillna(0))
    y = np.array(df.iloc[:, i+1].fillna(0))
    distance, path = fastdtw(x, y, dist=euclidean)
    
    # 每轮新建临时列表存储当前Jolt配对的数据
    temp_data = []
    for j in range(len(path)):
        temp_data.append([
            dfnew['Time'].iloc[path[j][0]],
            dfnew.iloc[:, i].iloc[path[j][0]],
            dfnew.iloc[:, i+1].iloc[path[j][1]]
        ])
    
    # 生成当前配对的DataFrame并加入列表
    current_df = pd.DataFrame(
        data=temp_data,
        columns=[f"Time_{i}", f"Jolt_{i}", f"Jolt_{i+1}"]
    ).dropna()
    sync_dfs.append(current_df)

# 横向拼接所有DataFrame,outer模式保留全部数据
final_result = pd.concat(sync_dfs, axis=1)
print(final_result)

代码说明

  • 用sync_dfs统一管理每轮生成的DataFrame,避免多轮数据交叉污染
  • 每轮循环使用temp_data存储当前Jolt对的同步数据,确保数据集独立
  • pd.concat默认采用join='outer',会保留所有行的信息,不会丢失数据
  • 列名改为Time_i、Jolt_i格式,清晰区分不同Jolt配对的时间和振动数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:39:14