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

按Service列分组计算多列True/False占比的实现方法

按Service分组计算多列布尔值的占比解决方案

嘿,我刚好处理过类似的需求,这里有两种简洁高效的方法帮你实现目标——按Service的Open/Closed分组,计算其他所有布尔列的True/False占比:

方法一:直接用groupby + mean(最简洁高效)

因为在pandas里布尔值会被当作1(True)和0(False)处理,所以分组后直接计算均值,得到的就是对应列True的占比,这完全符合你要的value_counts(normalize=True)里True的比例结果。

import pandas as pd

# 假设你的数据已经存放在df中
result = df.groupby('Service').mean()
print(result)

针对你的示例数据,运行后会输出:

DoorDash  Grubhub / Seamless  UberEats    Caviar  Postmates  JustEat  Deliveroo  Foodora  Grab  Talabat      Tock
Service                                                                                                                    
Closed    0.400000            0.400000  0.400000  0.600000        0.4      0.0        0.0      0.0   0.0      0.0  0.750000
Open      0.600000            0.500000  0.500000  0.000000        0.4      0.0        0.0      0.0   0.0      0.0  0.000000

如果需要False的占比,直接用1 - result就能得到,非常方便。

方法二:用groupby + apply + value_counts(更直观展示True/False)

如果你想同时看到True和False的占比,可以用这种方法:

import pandas as pd

# 按Service分组,对每个分组的非Service列执行value_counts(normalize=True)
full_result = df.groupby('Service').apply(
    lambda group: group.drop('Service', axis=1).apply(pd.Series.value_counts, normalize=True)
).unstack(level=1)

# 查看完整结果(包含True和False的占比)
print(full_result)

# 如果只需要True的占比,提取出来即可
true_only_result = full_result.xs(True, level=1, axis=1)
print(true_only_result)

这个方法会先对每个分组的每列计算完整的占比分布,再通过unstack调整结构,让结果更清晰。

结果验证

拿你的示例数据里的DoorDash列验证:

  • Open组共有5行,其中True的有3行,3/5=0.6,和结果一致
  • Closed组共有4行,其中True的有2行,2/4=0.4,完全符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:52:41