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

如何在Python中基于多列行值生成统计新DataFrame?

问题

我有多列仅包含0或1的数据,示例表格如下:

苹果橙子梨
101
001
110

我希望统计每列中0的数量(存入“错误数”列)和1的数量(存入“正确数”列),生成如下格式的新DataFrame:

水果正确数错误数
苹果21
橙子12
梨21

尝试过结合value_counts()、groupby()和pandas.pivot_table,但在表格操作环节遇到困难。

解决方案

这里有几种简洁的实现方式:

方法一:求和+总行数计算

因为1的数量等于列的求和结果,0的数量等于总行数减去1的数量,代码如下:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    '苹果': [1, 0, 1],
    '橙子': [0, 0, 1],
    '梨': [1, 1, 0]
})

# 统计并整理结果
result = pd.DataFrame({
    '正确数': df.sum(),
    '错误数': len(df) - df.sum()
}).reset_index().rename(columns={'index': '水果'})

print(result)

方法二:宽表转长表+交叉统计

先将宽格式数据转为长格式,再用交叉表统计数量:

import pandas as pd

df = pd.DataFrame({
    '苹果': [1, 0, 1],
    '橙子': [0, 0, 1],
    '梨': [1, 1, 0]
})

# 宽表转长表
melted_df = df.melt(var_name='水果', value_name='数值')
# 生成交叉统计表格
cross_table = pd.crosstab(melted_df['水果'], melted_df['数值'])
# 重命名列并整理结构
result = cross_table.rename(columns={1: '正确数', 0: '错误数'}).reset_index()

print(result)

方法三:apply+value_counts

对每列应用value_counts统计值的数量,再调整格式:

import pandas as pd

df = pd.DataFrame({
    '苹果': [1, 0, 1],
    '橙子': [0, 0, 1],
    '梨': [1, 1, 0]
})

# 每列统计值的数量,转置后填充缺失值并转为整数
counts_df = df.apply(pd.Series.value_counts).T.fillna(0).astype(int)
# 重命名列并重置索引
result = counts_df.rename(columns={1: '正确数', 0: '错误数'}).reset_index().rename(columns={'index': '水果'})

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:07:20