我目前正在处理来自交叉表操作的数据框架。
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 '
答案 0 :(得分:1)
要指定pandas中任何数据框的列,只需使用所需顺序的列列表进行索引:
columns = ['A', 'C', 'D', 'B', 'E', 'All']
df2 = df.loc[:, columns]
print(df2)
答案 1 :(得分:0)
您可以使用reindex
或reindex_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()对我有用,而另一个则继续返回错误。再次感谢。