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

R语言基于分组统计多列不同置信等级占比的实现方法

你可以用Python的Pandas库完成该数据转换需求,具体实现代码如下:

import pandas as pd
import numpy as np

# 此处为构造的示例数据,实际使用时替换为你自己的df即可
data = {
    'ID': [1]*8,
    'Asset': ['A','B','C','D','E','F','G','H'],
    'CONF_1': ['PERFECT','PERFECT','LOW',np.nan,'MEDIUM','MEDIUM','VERY LOW',np.nan],
    'CONF_2': ['HIGH','LOW','HIGH','MEDIUM','MEDIUM','VERY LOW','VERY LOW','PERFECT'],
    'CONF_3': ['LOW','LOW','VERY LOW','MEDIUM','PERFECT',np.nan,'VERY LOW','HIGH']
}
df = pd.DataFrame(data)

# 每个CONF列总共有8条记录
total = len(df)

# 宽表转长表方便分组统计
melt_df = df.melt(id_vars='ID', value_vars=['CONF_1','CONF_2','CONF_3'],
                  var_name='conf_col', value_name='CONFIDENCE')
# 把空值替换为字符串NA方便统一统计
melt_df['CONFIDENCE'] = melt_df['CONFIDENCE'].fillna('NA')

# 分组统计各等级出现次数并计算占比
stat_df = melt_df.groupby(['ID', 'conf_col', 'CONFIDENCE'], dropna=False).size().reset_index(name='cnt')
stat_df['pct'] = stat_df['cnt'] / total * 100

# 长表转回期望的宽表格式
res_df = stat_df.pivot(index=['ID', 'CONFIDENCE'], columns='conf_col', values='pct').reset_index().fillna(0)

# 格式化列名和百分比输出
res_df = res_df.rename(columns={'CONF_1':'CONF_1 %', 'CONF_2':'CONF_2 %', 'CONF_3':'CONF_3 %'})
res_df = res_df[['ID', 'CONFIDENCE', 'CONF_1 %', 'CONF_2 %', 'CONF_3 %']]

# 可选:将数值转为带%的字符串格式
for col in ['CONF_1 %', 'CONF_2 %', 'CONF_3 %']:
    res_df[col] = res_df[col].apply(lambda x: f"{x} %".replace('.0', '') if x != 0 else '0')

print(res_df)

运行上述代码即可得到你要求的统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:09:00