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

如何在Pandas DataFrame中合并两列生成第三列:取有效值或均值

问题解决:Pandas生成符合规则的第三列

需求说明

我有一个包含两列的Pandas DataFrame,需要生成第三列df['col3'],规则如下:

  • 若仅col1或col2存在有效值,则取该值;
  • 若两列均有有效值,则取二者的均值;
  • 若两列均无有效值,则保留NaN。

尝试的代码(不符合预期)

df['col3']=pd.concat([df['col2'], df['col1']]).groupby(level=0).mean()

示例数据

time        col1        col2    
2000-01-31  389.5400    NaN
2000-02-29  387.7700    NaN
2000-03-31  386.6600    250.2
2000-04-30  384.1850    NaN
2000-05-31  383.3600    267.2
...     ...     ...
2020-03-31  396.3755    NaN
2020-04-30  NaN         350.12
2020-05-31  395.0485    NaN
2020-06-30  394.9400    396.321
2020-07-31  395.3070    NaN

正确实现方法

方法1:直接使用mean(axis=1)

Pandas的mean方法会自动忽略NaN值,完全匹配你的规则,代码简洁高效:

df['col3'] = df[['col1', 'col2']].mean(axis=1)
  • 仅单列有值时,均值等于该有效值;
  • 两列都有值时,计算二者的平均值;
  • 两列均无有效值时,结果保留NaN。

方法2:自定义apply逻辑(适配复杂规则场景)

如果后续规则需要调整,可以用自定义函数逐行处理:

import pandas as pd

def get_col3_value(row):
    valid_values = [val for val in [row['col1'], row['col2']] if pd.notna(val)]
    if not valid_values:
        return pd.NA
    elif len(valid_values) == 1:
        return valid_values[0]
    else:
        return sum(valid_values) / len(valid_values)

df['col3'] = df.apply(get_col3_value, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:46:03