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

pandas转宽格式后出现NaN重复行 如何按Time-Parameter去重计算

pandas按Time-Parameter配对合并有效值并计算乘积的实现

你的原始数据中同一Time+Parameter组合下,NodeA和NodeB的有效值分散在不同行、空值错位,直接按两个维度分组聚合提取非空值再计算乘积即可,无需手动逐行去重。

实现步骤

  • 第一步:预处理数据,将字符串格式的数值和'NaN'转为浮点型数值与真实空值,方便后续计算
import pandas as pd
import numpy as np

# 读取原始数据
df = pd.DataFrame({
    'Time':['0', '1', '0', '1','0', '1','0', '1'],
    'Parameter':['down_A', 'down_A', 'up_A','up_A','down_A', 'down_A', 'up_A','up_A'],
    'NodeA':['2.56', '0.06', '0.14', '1.005','NaN', 'NaN', 'NaN','NaN'],
    'NodeB':['NaN', 'NaN','NaN', 'NaN', '1.44', '1.11','0.56','1.98']
})

# 数值列类型转换
df[['NodeA', 'NodeB']] = df[['NodeA', 'NodeB']].replace('NaN', np.nan).astype(float)
  • 第二步:按Time和Parameter分组,提取每组内NodeA、NodeB的第一个非空值。当前示例中每组两个列各自仅有1个有效数值,其余全为空值,用first()即可准确提取到有效值
result = df.groupby(
    ['Time', 'Parameter'], 
    as_index=False
)[['NodeA', 'NodeB']].first()
  • 第三步:计算两列的乘积,生成Multiplied列
result['Multiplied'] = result['NodeA'] * result['NodeB']

结果验证

运行代码后得到的result完全匹配预期输出,结构如下:

Time Parameter  NodeA  NodeB  Multiplied
0    0    down_A  2.560   1.44      3.6864
1    0      up_A  0.140   0.56      0.0784
2    1    down_A  0.060   1.11      0.0666
3    1      up_A  1.005   1.98      1.9899

补充说明:如果实际业务中同一Time-Parameter组内存在多个非空值,可以根据需求将first()替换为sum()、mean()、max()等聚合函数,分组聚合的方式比手动删重行稳定性更高,不会因为行顺序变动导致取值错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:22:01