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

如何合并列数不同的3个Pandas DataFrame并生成频次统计结果?

合并不同结构Pandas DataFrame的解决方案

先明确三个DataFrame的构造(方便复现)

先把你给出的原始数据转换成对应三个DataFrame:

import pandas as pd

# 单列DataFrame df
df = pd.DataFrame({
    'Itemcode': ['AAC', 'AAB', 'AAG', 'AAD', 'AAC']
})

# 单列DataFrame df2
df2 = pd.DataFrame({
    'Itemcode2': ['AAC', 'AAB', 'AAF', 'AAD', None]
})

# 双列DataFrame df3
df3 = pd.DataFrame({
    'Itemcode': ['AAC', 'AAB', 'AAT', 'AAD', 'AAF'],
    'count': [2, 1, 0, 1, 1]
})

处理步骤

  1. 统计单列DataFrame的频次
    对两个单列DataFrame分别做频次统计,转成带列名的DataFrame:
# 统计df的Itemcode出现频次,重命名列
df_counts = df['Itemcode'].value_counts().rename('df').to_frame()

# 统计df2的Itemcode2出现频次,重命名列
df2_counts = df2['Itemcode2'].value_counts().rename('df2').to_frame()
  1. 收集所有唯一编码作为统一索引
    要覆盖三个DataFrame里出现的所有编码,保证合并后没有遗漏:
all_codes = pd.concat([df['Itemcode'], df2['Itemcode2'].dropna(), df3['Itemcode']]).unique()

如果只需要你预期结果里的编码,直接指定即可:all_codes = ['AAC', 'AAB', 'AAT', 'AAD', 'AAF']

  1. 整理双列DataFrame的结构
    将df3的Itemcode设为索引,提取count列并重命名:
df3_counts = df3.set_index('Itemcode')['count'].rename('df3').to_frame()
  1. 合并并填充缺失值
    用统一索引对齐三个DataFrame,缺失值填充为0:
result = pd.concat([
    df_counts.reindex(all_codes, fill_value=0),
    df2_counts.reindex(all_codes, fill_value=0),
    df3_counts.reindex(all_codes, fill_value=0)
], axis=1)

# 去掉索引名,和预期结果格式一致
result.index.name = None

print(result)

最终输出

df  df2  df3
AAC    2    1    2
AAB    1    1    1
AAT    0    0    0
AAD    1    1    1
AAF    0    1    1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:56:03