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

Python3 Pandas:如何将两个DataFrame的计数与百分比合并至同一单元格?

用Pandas融合计数与百分比DataFrame,实现同单元格双值展示

嗨,这个需求在数据可视化前的结果整理里特别常见,用Pandas的字符串格式化和元素级操作就能轻松搞定!我给你一步步拆解实现过程,附示例代码和细节优化:

1. 先构造示例数据(方便你对照测试)

首先我们先模拟两个结构完全匹配的DataFrame——一个存计数值,一个存百分比:

import pandas as pd
import numpy as np

# 计数值DataFrame(替换成你自己的数据源)
count_df = pd.DataFrame({
    'A': [15, 28, 42],
    'B': [9, 17, 31],
    'C': [5, 12, 22]
}, index=['Group1', 'Group2', 'Group3'])

# 百分比DataFrame(这里以行总和为基准计算,你可以替换成自己的百分比数据)
# 如果你的百分比已经是百分比数值(比如23.1而不是0.231),跳过*100这步
pct_df = count_df.div(count_df.sum(axis=1), axis=0).round(3) * 100

2. 核心:融合两个DataFrame的两种方法

方法一:快速字符串拼接(适合简单场景)

如果对格式要求不高,直接用元素级的字符串拼接就能快速得到结果:

# 直接拼接计数和百分比字符串
merged_df = count_df.astype(str) + ' (' + pct_df.round(1).astype(str) + '%)'

这种方法优点是代码简洁,但缺点是如果百分比是整数会出现28.0%这类不美观的格式,适合快速预览。

方法二:精细格式化(推荐用于正式展示)

如果要让格式更规范(比如百分比保留1位小数、避免多余的.0),可以自定义格式化函数,用np.vectorize实现逐元素处理:

# 自定义格式化函数:整合计数和百分比
def format_count_pct(count, pct):
    # 计数转整数,百分比保留1位小数,格式为「计数 (百分比%)」
    return f"{int(count)} ({pct:.1f}%)"

# 用vectorize批量处理所有单元格,同时保留原索引和列名
merged_df = pd.DataFrame(
    np.vectorize(format_count_pct)(count_df, pct_df),
    index=count_df.index,
    columns=count_df.columns
)

3. 最终效果示例

运行后merged_df的输出会是这样的:

A          B          C
Group1  15 (23.1%)  9 (13.8%)  5 (7.7%)
Group2  28 (43.8%) 17 (26.6%) 12 (18.8%)
Group3  42 (41.6%) 31 (30.7%) 22 (21.8%)

关键注意事项

  • 确保两个DataFrame结构完全匹配:索引、列名必须一一对应,否则会出现对齐错误。如果结构不一致,先使用count_df.align(pct_df)来对齐后再处理。
  • 区分百分比的存储形式:如果你的百分比DataFrame存的是小数(比如0.231而不是23.1),记得在格式化时乘以100,比如f"{count} ({pct*100:.1f}%)"。
  • 保留原始数据:融合后的DataFrame是字符串类型,只适合展示,不要覆盖原始的数值型DataFrame,方便后续计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:38:29