如何在Pandas中按州计算各行业公司的占比平均值
按州计算Pandas中各行业公司的占比平均值
嘿,这个需求其实很好实现,咱们一步步来搞定它!你的DataFrame里每个公司对应一行,用1/0标记是否属于某行业,核心思路就是先统计每个州各行业的公司总数,再除以该州的总公司数量,最后转成百分比格式即可。
步骤1:构造示例数据(模拟你的数据集)
首先咱们把你给的示例扩展一下,方便演示效果:
import pandas as pd data = { 'company_name': ['google', 'jimmy', 'microsoft', 'apple', 'bankofamerica', 'walmart'], 'country_code': ['USA', 'GBR', 'USA', 'USA', 'USA', 'USA'], 'state_code': ['CA', 'unknown', 'NY', 'CA', 'NY', 'CA'], 'software': [1, 0, 1, 1, 0, 0], 'finance': [0, 0, 0, 0, 1, 0], 'commerce': [0, 1, 0, 0, 0, 1] } df = pd.DataFrame(data)
步骤2:计算每个州的各行业公司数量
按state_code分组,对各行业列求和,得到每个州里各行业的公司总数:
# 只选取行业相关的列进行分组求和 industry_counts = df.groupby('state_code')[['software', 'finance', 'commerce']].sum()
步骤3:计算每个州的总公司数量
同样按state_code分组,用size()获取每个州的公司总数:
total_companies = df.groupby('state_code').size()
步骤4:计算占比并转成百分比
把各行业的数量除以对应州的总公司数,再乘以100转成百分比,最后保留两位小数让结果更美观:
industry_percentages = (industry_counts.div(total_companies, axis=0) * 100).round(2)
最终结果
运行完上面的代码后,你会得到这样的结果:
software finance commerce state_code CA 66.67 0.00 33.33 NY 50.00 50.00 0.00 unknown 0.00 0.00 100.00
额外小技巧
- 如果想排除
unknown这类无效的州,可以在计算前先过滤数据:df = df[df['state_code'] != 'unknown'] - 也可以把所有步骤合并成一行更简洁的代码:
industry_percentages = df.groupby('state_code')[['software', 'finance', 'commerce']].sum() \ .div(df.groupby('state_code').size(), axis=0) \ .mul(100) \ .round(2)
内容的提问来源于stack exchange,提问作者user7057659
相关产品推荐
相关产品推荐

