如何用Pandas分离数据集唯一名称并分别执行遗传算法
按名称分组执行遗传算法的实现方案
核心思路
利用Pandas的groupby功能将数据集按Name列分组,再对每个分组单独调用你已实现的遗传算法函数,最后汇总各组的最优解。
步骤与代码示例
1. (可选)清洗Name列(处理示例中的冗余标点)
示例数据里存在a1和a1.这类疑似重复的名称,先清理避免无效分组:
import pandas as pd # 假设你的数据集已导入为df df['Name'] = df['Name'].str.rstrip('.') # 去掉Name末尾的点符号
2. 定义你的遗传算法函数
确保函数输入为单个分组的DataFrame,输出包含x1-x3最优解的结构(比如字典或Series):
def run_genetic_algorithm(group_df): # 这里插入你已实现的遗传算法逻辑 # 示例逻辑(替换为你的实际代码): # 提取当前分组的price和quantity数据 prices = group_df['price'].values quantities = group_df['quantity'].values # 执行遗传算法计算x1-x3最优解 # ...(你的算法代码)... # 返回最优解,比如字典格式 return {'x1': optimal_x1, 'x2': optimal_x2, 'x3': optimal_x3}
3. 分组执行算法并汇总结果
# 按Name分组,对每个分组应用遗传算法 group_results = df.groupby('Name').apply(run_genetic_algorithm) # 将结果转换为结构化DataFrame方便查看 results_df = group_results.reset_index(name='Optimal_Solution') # 拆分最优解到单独列(可选) results_df[['x1', 'x2', 'x3']] = results_df['Optimal_Solution'].apply(pd.Series)
优化建议
- 若数据集极大,单线程
apply效率不足,可使用并行分组处理(比如借助swifter库实现并行apply,无需额外修改算法逻辑)。 - 执行前可先确认唯一名称列表:
print(df['Name'].unique()),确保分组符合预期。 - 确保遗传算法函数仅依赖传入的分组数据,避免引用全局变量导致分组间数据污染。
内容的提问来源于stack exchange,提问作者it's M
相关产品推荐
相关产品推荐

