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

如何在Pandas中按Doc_No分组计算Fault占count的百分比?

解决Pandas中按组计算故障百分比的问题

我猜你是想计算每组中故障(Fault=1)的数量占该组总记录数的百分比吧?毕竟直接用Fault的0/1值除以count再乘100的话,结果没什么实际意义。下面给你几种符合需求的实现方案:

方法一:分组聚合生成汇总结果

这种方法会直接生成按Doc_No分组的汇总表格,包含总数量、故障数量和对应的百分比:

import pandas as pd

df = pd.DataFrame(
    data={'Doc_No':[10,10,20,20], 'Fault':[0,1,0,1], 'count':[41,1,24,1]}
)

# 按Doc_No分组,计算每组总count和故障count
grouped_stats = df.groupby('Doc_No').agg(
    total_count=('count', 'sum'),
    fault_count=('count', lambda x: x[df.loc[x.index, 'Fault'] == 1].sum())
)

# 计算故障百分比并保留两位小数(可选)
grouped_stats['fault_percentage'] = (grouped_stats['fault_count'] / grouped_stats['total_count'] * 100).round(2)

print(grouped_stats)

运行结果:

total_count  fault_count  fault_percentage
Doc_No                                             
10               42            1              2.38
20               25            1              4.00

方法二:保留原数据结构添加百分比列

如果需要保留原始DataFrame的行结构,同时给故障行添加对应百分比,可以用transform快速获取组内总数:

# 给每行添加所在组的总count
df['group_total'] = df.groupby('Doc_No')['count'].transform('sum')

# 仅对Fault=1的行计算百分比,其他行设为0或NaN
df['fault_percentage'] = df.apply(
    lambda row: (row['count'] / row['group_total'] * 100).round(2) if row['Fault'] == 1 else 0,
    axis=1
)

print(df)

运行结果:

Doc_No  Fault  count  group_total  fault_percentage
0      10      0     41           42               0.0
1      10      1      1           42               2.38
2      20      0     24           25               0.0
3      20      1      1           25               4.00

方法三:高效的分组遍历(适合大数据量)

如果你的数据集很大,用分组遍历的方式可以避免一些复杂的lambda操作,可读性更强:

result_list = []
for doc_no, group in df.groupby('Doc_No'):
    total = group['count'].sum()
    fault_num = group[group['Fault'] == 1]['count'].sum()
    percentage = (fault_num / total * 100).round(2)
    result_list.append({'Doc_No': doc_no, 'fault_percentage': percentage})

result_df = pd.DataFrame(result_list)
print(result_df)

运行结果:

Doc_No  fault_percentage
0      10              2.38
1      20              4.00

你可以根据自己的需求选择合适的方法:需要汇总结果选方法一或三,需要保留原始数据结构选方法二。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:22:44