使用Pandas在DataFrame中多条件下按团队计算Zone 6占比
计算每个团队的Zone 6占比实现方案
假设你的DataFrame包含Team(团队标识列)和Zone(区域列)核心字段,以下是两种高效实现方式:
方法一:分组自定义计算
通过groupby按团队分组,统计每组内Zone为6的记录数占组内总记录数的比例:
import pandas as pd # 替换为你的DataFrame名称或读取逻辑 df = pd.read_csv("your_data_source.csv") # 计算Zone 6占比 zone6_ratio = df.groupby('Team').apply( lambda group: (group['Zone'] == 6).sum() / len(group) ).reset_index(name='Zone6_Ratio') # 输出结果,如需百分比格式可乘以100 print(zone6_ratio)
方法二:交叉表归一化计算
利用crosstab生成团队与Zone的交叉计数表,再按行归一化直接得到占比:
import pandas as pd df = pd.read_csv("your_data_source.csv") # 按团队分组,计算各Zone的占比(行维度归一化) zone_ratio_table = pd.crosstab(df['Team'], df['Zone'], normalize='index') # 提取Zone 6的占比列并重命名 zone6_ratio = zone_ratio_table[[6]].rename(columns={6: 'Zone6_Ratio'}) print(zone6_ratio)
补充说明
- 两种方法最终都会生成包含
Team和Zone6_Ratio的结果表,Zone6_Ratio为0-1的小数,如需百分比格式可执行zone6_ratio['Zone6_Ratio'] = zone6_ratio['Zone6_Ratio'] * 100 - 如果需要先筛选特定数据,可在分组前通过
df[df['过滤列'] == 筛选条件]完成数据过滤
内容的提问来源于stack exchange,提问作者Shadowz
相关产品推荐
相关产品推荐

