如何计算Indicator列的出现占比并生成无多级索引的可绘图结果集
分组计算Indicator出现占比的实现方案
嘿,这事儿不难,我来带你一步步搞定这个需求——按照Date和Hour分组,算出每个分组里不同Indicator的出现占比,输出成无多级索引的规整表格。
第一步:准备数据和工具
首先我们得导入pandas,然后把你给的原始数据转换成DataFrame:
import pandas as pd # 把原始数据转换成DataFrame raw_data = { 'Date': ['5/10/2018', '5/10/2018', '5/10/2018', '5/10/2018'], 'Hour': [9, 9, 9, 9], 'Indicator': ['F', 'F', 'F', 'NF'] } df = pd.DataFrame(raw_data)
第二步:核心计算逻辑
这里用pandas的分组功能,结合值计数和百分比转换就能轻松搞定:
# 按Date+Hour分组,计算每个Indicator的占比并格式化 result_df = df.groupby(['Date', 'Hour'])['Indicator']\ .value_counts(normalize=True) # 计算分组内的占比比例 .mul(100) # 把比例转换成百分比数值 .reset_index(name='%Indicator') # 把多级索引拆成普通列,指定新列名 # 如果需要把百分比转成整数(去掉小数点),可以添加这一行 result_df['%Indicator'] = result_df['%Indicator'].astype(int)
简单拆解下逻辑:
groupby(['Date', 'Hour']):按日期和小时组合分组,确保我们只在同一时间维度内计算占比value_counts(normalize=True):统计每个分组里不同Indicator的数量,并自动转换成占比mul(100):把0.75这类小数比例转成75的百分比数值形式reset_index:这步是关键,它把分组后生成的多级索引拆成普通列,完美符合你要的无多级索引格式
第三步:查看最终结果
运行下面的代码就能得到你想要的结果:
print(result_df)
输出结果如下:
Date Hour Indicator %Indicator 0 5/10/2018 9 F 75 1 5/10/2018 9 NF 25
内容的提问来源于stack exchange,提问作者Suhas R
相关产品推荐
相关产品推荐

