在pandas DataFrame中排列列

时间:2017-03-09 04:35:48

标签: python pandas dataframe crosstab

我目前正在处理来自交叉表操作的数据框架。

pd.crosstab(data['One'],data['two'], margins=True).apply(lambda r: r/len(data)*100,axis = 1)

列按以下顺序出现

A   B  C  D  E  All
B   
C   
D   
E
All             100

但我希望订购的列如下所示:

A    C  D  B  E All
B
C
D
E
All             100

有没有简单的方法来组织列? 当我使用colnames=['C', 'D','B','E']时,它会返回错误:

'AssertionError: arrays and names must have the same length '

3 个答案:

答案 0 :(得分:1)

要指定pandas中任何数据框的列,只需使用所需顺序的列列表进行索引:

columns = ['A', 'C', 'D', 'B', 'E', 'All']
df2 = df.loc[:, columns]
print(df2)

答案 1 :(得分:0)

您可以使用reindexreindex_axis或按subset更改订单:

colnames=['C', 'D','B','E']
new_cols = colnames + ['All']

#solution 1 change ordering by reindexing
df1 = df.reindex_axis(new_cols,axis=1)
#solution 2 change ordering by reindexing
df1 = df.reindex(columns=new_cols)
#solution 3 change order by subset
df1 = df[new_cols]

print (df1)
    C   D   B   E    All
0 NaN NaN NaN NaN    NaN
1 NaN NaN NaN NaN    NaN
2 NaN NaN NaN NaN    NaN
3 NaN NaN NaN NaN    NaN
4 NaN NaN NaN NaN  100.0

答案 2 :(得分:0)

再次感谢,似乎.reindex_axis()对我有用,而另一个则继续返回错误。再次感谢。