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

如何按索引对含哑变量的DataFrame执行reverse explode操作

实现方案

你需要的按索引分组直接调用groupby(level=0)即可实现,同一索引下非哑变量列取值一致的前提下,可按如下步骤处理:

  • 第一步:拆分需要保留的非哑变量列和菜系哑变量列
# 哑变量列名列表,也可手动指定,比如 ["川菜", "粤菜", "湘菜"]
cuisine_cols = cuisine_dummies.columns.tolist()
# 其余需要保留的非哑变量列
non_cuisine_cols = [col for col in rest_cuisine_style.columns if col not in cuisine_cols]
  • 第二步:生成单行对应的菜系值,再按索引分组聚合
# 先给每行生成当前行对应的菜系值,取值为0的列会自动过滤
rest_cuisine_style['merged_cuisine'] = rest_cuisine_style[cuisine_cols].apply(
    lambda row: ','.join(row[row == 1].index), axis=1
)

# 按索引分组,非哑变量列取首值,菜系列合并所有取值
rest_cuisine_style_imploded = rest_cuisine_style.groupby(level=0).agg(
    # 非哑变量列取第一个值,同一索引下这些值默认完全一致
    **{col: 'first' for col in non_cuisine_cols},
    # 合并菜系列,用逗号分隔,要列表格式就把','.join改成list
    merged_cuisine = ('merged_cuisine', lambda x: ','.join([i for i in x if i]))
).reset_index(drop=True)

补充说明:如果你的索引不是分组的唯一标识(比如是默认的自增顺序索引),只需要把groupby(level=0)替换为groupby('你的分组唯一标识列名')即可,其余逻辑保持不变。如果需要合并结果为列表格式,把聚合逻辑里的','.join([i for i in x if i])替换为[i for i in x if i]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:48:03