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

如何在Pandas中基于组合选择行并保留列名?

解决DataFrame行组合保留列名的问题

原代码通过df_items.values提取数组后生成组合,会丢失DataFrame的列名和索引信息,以下是两种保留列名的实现方式:

方式一:生成每个组合对应的独立DataFrame

直接对DataFrame的行索引做组合,通过loc切片获取完整结构的子DataFrame:

from itertools import combinations
import pandas as pd

# 生成行索引的组合
combos = combinations(df_items.index, i)
# 遍历组合,生成每个组合对应的DataFrame,存入列表
selected_items_list = [df_items.loc[list(combo), :] for combo in combos]

每个selected_items_list中的元素都是保留了原列名的DataFrame,可单独处理。

方式二:整理为带多级索引的大DataFrame

如果需要将所有组合整合到一个DataFrame中,可通过多级索引区分不同组合:

from itertools import combinations
import pandas as pd

# 先将索引组合转为列表
combos = list(combinations(df_items.index, i))
# 构建多级索引:第一层标记组合编号,第二层保留原行索引
multi_index = pd.MultiIndex.from_tuples(
    [(combo_id, row_id) for combo_id, combo in enumerate(combos) for row_id in combo],
    names=['组合编号', '原行索引']
)
# 提取所有组合的行并设置多级索引
selected_items = df_items.loc[[row for combo in combos for row in combo], :].set_index(multi_index)

此方法生成的DataFrame完整保留原列名,通过多级索引可快速定位到某个组合的所有行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:38:10