2017-03-09 3 views
1

現在、クロス集計操作からデータフレームを作成しています。パンダのデータフレームに列を配置する

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 

列を整理する簡単な方法はありますか?

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

答えて

0

することができます私はcolnames=['C', 'D','B','E']を使用する場合、それはエラーを返します 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 
0

したいために、パンダの列のリストを持つだけのインデックスを任意のデータフレームの列を指定するには:

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

おかげで再びそれがあるかのように思えます.reindex_axis()は私のために働き、他の人はエラーを返し続けました。再度、感謝します。

関連する問題