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

如何通过Pandas DataFrame自连接实现交叉连接补充缺失行

问题:在Pandas中补充DataFrame的缺失维度组合行,填充数值列NaN

需要将DataFrame与自身进行类似交叉连接的操作,确保每个model对应所有version的记录都存在,补充year至version的缺失唯一组合行,缺失的数值列(value、value 2)填充NaN。

原数据示例:

yearbrandseriesmodelversionvaluevalue 2
2022bmwA1Xplan31
2022bmwB2Xplan81
2022bmwA1Xsold11
2022bmwC3Xsold101
2021bmwA1Xsold5020
2021bmwC3Xsold5020
2022bmwA1Xprediction21
2022audiD4Xprediction71

期望结果:

yearbrandseriesmodelversionvaluevalue 2
2022bmwA1Xplan31
2022bmwB2Xplan81
2022bmwC3XplanNaNNaN
2022audiD4XplanNaNNaN
2022bmwA1Xsold11
2022bmwC3Xsold101
2021bmwA1Xsold5020
2021bmwC3Xsold5020
2022audiD4XsoldNaNNaN
2022bmwA1Xprediction21
2022audiD4Xprediction71
2022bmwB2XpredictionNaNNaN
2022bmwC3XpredictionNaNNaN

解决方案代码:

import pandas as pd

# 构造原数据DataFrame
data = {
    'year': [2022, 2022, 2022, 2022, 2021, 2021, 2022, 2022],
    'brand': ['bmw', 'bmw', 'bmw', 'bmw', 'bmw', 'bmw', 'bmw', 'audi'],
    'series': ['A', 'B', 'A', 'C', 'A', 'C', 'A', 'D'],
    'model': ['1X', '2X', '1X', '3X', '1X', '3X', '1X', '4X'],
    'version': ['plan', 'plan', 'sold', 'sold', 'sold', 'sold', 'prediction', 'prediction'],
    'value': [3, 8, 1, 10, 50, 50, 2, 7],
    'value 2': [1, 1, 1, 1, 20, 20, 1, 1]
}
df = pd.DataFrame(data)

# 1. 提取所有唯一的维度组合(year、brand、series、model)
unique_dimensions = df[['year', 'brand', 'series', 'model']].drop_duplicates()

# 2. 提取所有唯一的version类型
unique_versions = df[['version']].drop_duplicates()

# 3. 通过临时键实现交叉连接,生成所有可能的维度+version组合
unique_dimensions['temp_key'] = 1
unique_versions['temp_key'] = 1
all_possible_combinations = pd.merge(unique_dimensions, unique_versions, on='temp_key').drop('temp_key', axis=1)

# 4. 左连接原数据,自动填充缺失的数值列为NaN
final_result = pd.merge(all_possible_combinations, df, 
                        on=['year', 'brand', 'series', 'model', 'version'], 
                        how='left')

# 输出结果
print(final_result)

代码说明:

  • drop_duplicates():获取唯一的维度组合和version类型,避免重复生成无效组合。
  • 临时键temp_key:用于实现Pandas中的交叉连接(笛卡尔积),将每个维度组合与所有version进行配对。
  • how='left':左连接保留所有生成的组合行,原数据中不存在的组合对应的数值列会自动填充为NaN,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:45:38