如何在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
相关产品推荐
相关产品推荐

