首页 > 解决方案 > 使用 itertools.combinations 生成具有指定顺序的组合

问题描述

我曾经itertools.combinations为数据框的索引生成组合。我想要指定顺序的组合 -->(High - Mid - Low)

例子

from itertools import combinations
d = {'levels':['High', 'High', 'Mid', 'Low', 'Low', 'Low', 'Mid'], 'converted':[True, True, True, False, False, True, False]}
df = pd.DataFrame(data=d)
df_ = pd.crosstab(df['levels'], df['converted'])

df_

converted   False   True
levels      
High        0       2
Low         2       1
Mid         1       1

list(combinations(df_.index, 2))返回[('High', 'Low'), ('High', 'Mid'), ('Low', 'Mid')]

我想成为第三组('Mid', 'Low'),我怎样才能做到这一点?

标签: pandasitertools

解决方案


使用DataFrame.reindex第一个,但列表中的第一个和第二个值被交换:

order = ['High','Mid','Low']
a = list(combinations(df_.reindex(order).index, 2))
print (a)
[('High', 'Mid'), ('High', 'Low'), ('Mid', 'Low')]

推荐阅读