Pandas 对具有columns.name的dataframe列重新排序

Pandas 对具有columns.name的dataframe列重新排序,pandas,Pandas,我想对从交叉表生成的数据帧的列重新排序。但是,我使用的方法不起作用,因为它有columns.name 示例数据 d = {'levels':['High', 'High', 'Mid', 'Low', 'Low', 'Low', 'Mid'], 'converted':[True, True, True, False, False, True, False]} df = pd.DataFrame(data=d) df 然后我用交叉表来计数 cb=pd.交叉表(df['levels',df['c

我想对从
交叉表生成的数据帧的列重新排序。但是,我使用的方法不起作用,因为它有columns.name

示例数据

d = {'levels':['High', 'High', 'Mid', 'Low', 'Low', 'Low', 'Mid'], 'converted':[True, True, True, False, False, True, False]}
df = pd.DataFrame(data=d)
df

然后我用交叉表来计数
cb=pd.交叉表(df['levels',df['converted'])

cb

我想交换两列的顺序。我尝试了
cb[[True,False]]
并得到了错误
ValueError:Item错误的长度2而不是3。

我猜这是因为它有
列。name
,它是
转换的

您可以尝试如下数据帧重新索引方法:

import pandas as pd
d = {'levels':['High', 'High', 'Mid', 'Low', 'Low', 'Low', 'Mid'], 'converted':[True, True, True, False, False, True, False]}
df = pd.DataFrame(data=d)
print(df)
cb = pd.crosstab(df['levels'],df['converted'])
print(cb)
column_titles = [True,False]
cb=cb.reindex(columns=column_titles)
print(cb)

当列类型为bool时,尝试使用
sort\u index
,这将使正常的索引切片无法工作

cb.sort_index(axis=1,ascending=False)
Out[190]: 
converted  True   False
levels                 
High           2      0
Low            1      2
Mid            1      1

对于这种特殊情况,您可以使用
cb[False]=cb.pop(False)
import pandas as pd
d = {'levels':['High', 'High', 'Mid', 'Low', 'Low', 'Low', 'Mid'], 'converted':[True, True, True, False, False, True, False]}
df = pd.DataFrame(data=d)
print(df)
cb = pd.crosstab(df['levels'],df['converted'])
print(cb)
column_titles = [True,False]
cb=cb.reindex(columns=column_titles)
print(cb)
cb.sort_index(axis=1,ascending=False)
Out[190]: 
converted  True   False
levels                 
High           2      0
Low            1      2
Mid            1      1