如何计算各Block中CHN元素的占比(基于分组统计结果)
计算每个Block中CHN记录的占比
场景说明
原始CSV数据结构如下:
Block_Number Block_Type Segment_Duration Speaker_ID 0 1 Pause 1.21 FUZ 1 1 Pause 1.09 FUZ 2 1 AICF 2.06 FAN 3 1 AICF 1.23 FUZ 4 1 AICF 1.58 FAN ... ... ... ... ... 1280 32 Pause 1.03 FUZ 1281 32 Pause 1.16 SIL 1282 32 Pause 2.18 OLN 1283 32 AMF 0.98 FAN 1284 32 AMF 1.78 FAN
已通过分组筛选得到Speaker_ID为CHN的记录统计结果:
Block_Number Block_Type Speaker_ID Count 1 29 CIC CHN 98 6 9 AICF CHN 30 7 22 CIC CHN 29 10 19 CIC CHN 21 14 13 AICF CHN 15 28 27 CIC CHN 9 ... ... ... ... ...
需求:计算全部32个Block中,每个Block内CHN记录的占比(公式:CHN记录总数 / 该Block总记录数 * 100%)
实现步骤(基于Python pandas)
1. 计算每个Block的总记录数
从原始数据中统计每个Block的总条数:
import pandas as pd # 读取原始CSV文件 df = pd.read_csv('你的数据文件名.csv') # 按Block_Number分组,统计每个Block的总记录数 block_total = df.groupby('Block_Number').size().reset_index(name='Total_Count')
2. 汇总每个Block的CHN记录数
同一个Block可能包含不同Block_Type的CHN记录,需先将同一Block的CHN条数求和:
# 假设你已有的CHN统计数据存储在chn_df变量中 chn_block_sum = chn_df.groupby('Block_Number')['Count'].sum().reset_index(name='CHN_Count')
3. 合并数据并计算占比
将总记录数和CHN记录数合并,计算占比并格式化:
# 合并两个数据框,确保所有32个Block都被保留 result = pd.merge(block_total, chn_block_sum, on='Block_Number', how='left') # 给没有CHN记录的Block填充0值 result['CHN_Count'] = result['CHN_Count'].fillna(0) # 计算占比,保留两位小数并转为百分比格式 result['CHN_Percentage'] = (result['CHN_Count'] / result['Total_Count'] * 100).round(2).astype(str) + '%' # 按Block序号排序,方便查看结果 result = result.sort_values('Block_Number').reset_index(drop=True)
最终结果示例
处理后的数据会包含四列,示例如下:
Block_Number Total_Count CHN_Count CHN_Percentage 0 1 150 0 0.00% 1 2 90 15 16.67% ... 28 29 120 98 81.67% ... 31 32 80 0 0.00%
内容的提问来源于stack exchange,提问作者clee
相关产品推荐
相关产品推荐

