我有一个看起来像这样的数据框:
,可以查看和下载here。
我正在尝试调整数据框,以使“ DISTRICT”是索引的第一级,而“空白”,“ CON”,“ DEM”,“ GRE”,“ IND”,“ OTH”,“ REF” ,“ REP”,“ WEP”,“ WOR”列是多级索引的第二级。然后,我想将“状态”列设置为水平列“活动”和“无效”。我写了以下代码:
active_inactive8.pivot(index=['DISTRICT', 'DEM', 'REP', 'CON', 'GRE',
'WOR', 'IND', 'WEP', 'REF', 'OTH', 'BLANK'],
columns='STATUS')
但收到错误:ValueError: all arrays must be same length
。
我也尝试.melt失败,
答案 0 :(得分:1)
我认为需要set_index
和unstack
,但随后需要转置swaplevel
和最后一个sort_index
:
df = pd.read_csv('active_inactive8.csv', index_col=0)
df2 = df.set_index(['STATUS','DISTRICT']).unstack().T.swaplevel(1,0).sort_index()
df2 = df.pivot(index='STATUS', columns='DISTRICT').T.swaplevel(1,0).sort_index()
print (df2.head(10))
STATUS Active Inactive
DISTRICT
1 BLANK 128547.0 8436.0
CON 11778.0 643.0
DEM 144470.0 10086.0
GRE 1108.0 96.0
IND 23245.0 1545.0
OTH 394.0 28.0
REF 41.0 3.0
REP 162308.0 8290.0
WEP 150.0 5.0
WOR 2066.0 130.0