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

如何用Python多DataFrame实现多条件INDEX/MATCH及聚合需求

解决方案

1. 多条件匹配填充(对应Excel IFNA+INDEX/MATCH逻辑)

核心思路是优先按ID type 2匹配,空值用ID type 1匹配结果填充,用pandas的merge+combine_first实现,完全对应Excel的逻辑:

样例数据准备(方便测试)

import pandas as pd
import numpy as np

# DF1: ID type1, ID type2, Unit
df1 = pd.DataFrame({
    'ID type 1': ['A001', 'A001', 'A002', 'A003'],
    'ID type 2': ['B001', 'B002', 'B003', np.nan],
    'Unit': [10, 20, 30, 40]
})

# DF2: ID type1, ID type2, Tech
df2 = pd.DataFrame({
    'ID type 1': ['A001', 'A002', 'A002', 'A003'],
    'ID type 2': ['B001', np.nan, 'B003', 'B004'],
    'Tech': ['TechX', 'TechY', 'TechZ', 'TechW']
})

# DF3: 核心数据表
df3 = pd.DataFrame({
    '日期': ['2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02'],
    'ID type 1': ['A001', 'A002', 'A001', 'A003'],
    'ID type 2': ['B001', 'B005', np.nan, 'B004'],
    'Period': ['P1', 'P2', 'P1', 'P2'],
    'output': [100, 200, 150, 300]
})

填充Unit*列

# 第一步:按ID type2匹配Unit
df3 = df3.merge(df1[['ID type 2', 'Unit']], on='ID type 2', how='left', suffixes=('', '_id2'))
# 第二步:按ID type1匹配Unit,填充第一步的空值
id1_unit = df3.merge(df1[['ID type 1', 'Unit']], on='ID type 1', how='left')['Unit']
df3['Unit*'] = df3['Unit'].combine_first(id1_unit)
# 清理临时列
df3.drop(columns=['Unit', 'Unit_id2'], inplace=True)

填充Tech*列

逻辑和Unit完全一致,替换成DF2即可:

# 第一步:按ID type2匹配Tech
df3 = df3.merge(df2[['ID type 2', 'Tech']], on='ID type 2', how='left', suffixes=('', '_id2'))
# 第二步:按ID type1匹配Tech,填充空值
id1_tech = df3.merge(df2[['ID type 1', 'Tech']], on='ID type 1', how='left')['Tech']
df3['Tech*'] = df3['Tech'].combine_first(id1_tech)
# 清理临时列
df3.drop(columns=['Tech', 'Tech_id2'], inplace=True)

2. 按维度聚合计算output均值

用groupby按指定维度分组,直接调用mean()计算均值:

# 按日期、ID type1、Tech*、Period分组,计算output均值
agg_result = df3.groupby(
    ['日期', 'ID type 1', 'Tech*', 'Period'],
    as_index=False
)['output'].mean()
# 重命名均值列(可选)
agg_result.rename(columns={'output': 'output均值'}, inplace=True)

关键逻辑说明

  • combine_first:完全对应Excel的IFNA函数,优先取左侧非空值,空值则取右侧值
  • 两次merge分别对应Excel中两次INDEX/MATCH的逻辑,先匹配ID type2,再匹配ID type1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:40:58