如何基于字典中列表值计算符合灵活性标准的占比
解决方案
方法一:基于你现有字典代码的扩展
首先修正你的percentages函数,让它返回构建好的字典,然后添加逻辑计算灵活性百分比:
import pandas as pd def course_prereq_flexibility(fn): df = pd.read_csv(fn) df2 = df[["area", "prereq_type"]].copy() # 获取分组后的字典 dict1 = percentages(df2) # 计算每个键的灵活性百分比 result_dict = {} for key, values_list in dict1.items(): total_elements = len(values_list) # 统计符合灵活性标准的元素数量 flexible_count = sum(1 for val in values_list if val in ('None', 'Flexible')) # 计算百分比 percentage = flexible_count / total_elements # 格式化为保留两位小数的字符串 result_dict[key] = f"{percentage:.2f}" return result_dict def percentages(df2): dict1 = {} for items in range(len(df2)): key = df2.iloc[items, 0] values = df2.iloc[items, 1] dict1.setdefault(key, []) dict1[key].append(values) return dict1 # 添加返回语句
方法二:更高效的Pandas原生实现
直接利用Pandas的分组功能,避免手动构建字典,性能更优:
import pandas as pd def course_prereq_flexibility(fn): df = pd.read_csv(fn) # 按area分组,计算每组中符合条件的元素占比 flexibility_ratios = df.groupby('area')['prereq_type'].apply( lambda group: sum(group.isin(['None', 'Flexible'])) / len(group) ) # 格式化为保留两位小数的字符串,并转换为字典 result_dict = flexibility_ratios.apply(lambda x: f"{x:.2f}").to_dict() return result_dict
说明
- 两种方法都会返回符合要求的字典,键为area名称,值为保留两位小数的百分比字符串。
- 注意:你的示例输入中French的所有值都是'Hard',按要求计算应得到"0.00",但你给出的期望输出是"1.00",这可能是笔误。如果实际需求是统计'Hard'的占比,只需将判断条件改为
val == 'Hard'即可。
内容的提问来源于stack exchange,提问作者penny
相关产品推荐
相关产品推荐

