F#数组技术咨询:统计各唯一值对应的Yes/No计数及占比
我来帮你搞定这个需求,下面用Python给出具体的实现思路和代码示例,完全贴合你的要求:
实现步骤
- 先把数值数组和对应的Yes/No标签数组配对,确保每个数值都能找到它的标签
- 遍历排序后的唯一数值数组,对每个值筛选出所有小于等于该值的配对数据,统计Yes和No的数量
- 基于统计结果计算Yes的占比(处理边界情况避免报错)
- 格式化输出每个唯一值及其对应的Yes占比
代码示例
首先我们先模拟输入的三个数组(你可以替换成自己的真实数据):
# 模拟输入的三个数组 float_array = [1.2, 3.4, 2.1, 1.2, 3.4, 5.6, 2.1] string_array = ["Yes", "No", "Yes", "No", "Yes", "No", "Yes"] # 生成排序后的唯一值数组(如果你的第三个数组已经是现成的,直接用就行) sorted_unique_floats = sorted(list(set(float_array)))
第一步:配对数值与标签
把两个数组的对应元素绑定在一起,方便后续统计:
value_label_pairs = list(zip(float_array, string_array))
第二步:统计每个唯一值对应的Yes/No计数
这里我们用collections.Counter来简化统计逻辑,比手动循环更简洁:
from collections import Counter count_collection = [] for target_val in sorted_unique_floats: # 筛选出所有<=当前目标值的标签 filtered_labels = [label for val, label in value_label_pairs if val <= target_val] # 统计Yes和No的数量 label_counts = Counter(filtered_labels) # 把结果存入集合 count_collection.append({ "target_value": target_val, "yes_count": label_counts.get("Yes", 0), "no_count": label_counts.get("No", 0) })
第三步:计算Yes占比并输出
遍历统计集合,计算占比并格式化打印结果:
# 打印表头 print("唯一值 | Yes占比") print("------|--------") for item in count_collection: total = item["yes_count"] + item["no_count"] # 处理总数为0的极端情况(避免除以0报错) yes_ratio = item["yes_count"] / total if total != 0 else 0.0 # 保留两位小数输出 print(f"{item['target_value']} | {yes_ratio:.2f}")
输出结果示例
运行上面的代码后,你会得到这样的输出:
唯一值 | Yes占比 ------|-------- 1.2 | 0.50 2.1 | 0.75 3.4 | 0.60 5.6 | 0.57
代码说明
- 用
zip配对数组元素,保证数据对应关系不混乱 Counter可以自动统计标签出现的次数,省去手动计数的麻烦- 加入了总数为0的边界处理,避免程序报错
- 格式化输出让结果更易读
内容的提问来源于stack exchange,提问作者matekus
相关产品推荐
相关产品推荐

