将DataFrame列表类型Gruppo列转换为元素是否存在的True/False布尔列
实现方法
首先确认你的Gruppo列的元素是Python列表类型,如果为字符串格式的列表(如"[STAT, ING]"),先执行转换:
import ast df['Gruppo'] = df['Gruppo'].apply(ast.literal_eval)
方法1:纯pandas实现(无需额外依赖)
通过列表拼接+独热编码直接生成布尔列:
# 生成Gruppo对应的布尔列 gruppo_bool = df['Gruppo'].str.join('|').str.get_dummies().astype(bool) # 合并Codice列,设置Codice为索引 result = pd.concat([df['Codice'], gruppo_bool], axis=1).set_index('Codice') # 如果需要保留原表的Sem、CFU、Rating列,将上一行替换为: # result = pd.concat([df[['Codice', 'Sem', 'CFU', 'Rating']], gruppo_bool], axis=1).set_index('Codice')
方法2:借助sklearn的MultiLabelBinarizer实现
适合多标签场景的标准化处理方案:
import pandas as pd from sklearn.preprocessing import MultiLabelBinarizer mlb = MultiLabelBinarizer() # 生成Gruppo对应的布尔矩阵 gruppo_bool = pd.DataFrame( mlb.fit_transform(df['Gruppo']).astype(bool), columns=mlb.classes_, index=df.index ) # 合并并设置索引 result = pd.concat([df['Codice'], gruppo_bool], axis=1).set_index('Codice')
处理后你可以直接通过result.loc[codice_val, group_name]的方式快速判断指定课程是否属于对应分组,完全适配pulp的变量约束配置场景。
内容的提问来源于stack exchange,提问作者huncletheo
相关产品推荐
相关产品推荐

