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

基于df1非空掩码提取df2数据并转长表的高效实现方法

你可以用pandas的内置方法直接实现,全程向量化操作效率很高,不需要写循环,完整代码如下:

import pandas as pd

# 前提保证:df1和df2的timestamp完全对齐、数值列列名完全一致
# 步骤1:生成df1非空位置的掩码
mask = df1.set_index('timestamp').notna()
# 步骤2:用掩码提取df2对应位置的值,得到中间表
df_intermediate = df2.set_index('timestamp').where(mask).reset_index()
# 步骤3:宽表转长表,删除空值后按时间排序
df_final = df_intermediate.melt(
    id_vars='timestamp',
    var_name='Class',
    value_name='Numero'
).dropna(
    subset=['Numero']
).sort_values(
    by='timestamp'
).reset_index(drop=True)

代码说明:

  • where方法会保留条件为True位置的原值,其余位置自动填充NaN,刚好匹配你第一步的需求
  • melt是pandas专门用来做宽转长的方法,直接指定主键、新列名即可,最后删去空值就是你要的最终结果
    如果你处理的是百万行以上的大表,可以提前把timestamp设为两个表的索引,避免多次set_index的性能消耗。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:36:01