열 인덱스에 이름이 첨부 된 다중 인덱스 DataFrame
이 있습니다. 열을 쉽게 뒤섞어서 사용자가 지정한 순서와 쉽게 일치시킬 수 있기를 바랍니다. 파이프 라인이 다운되었으므로 this recommended solution을 사용할 수 없으며 생성시 올바르게 정렬 할 수 없습니다.특정 수준에서 다중 인덱스 데이터 프레임 열을 재정렬하는 방법
가 나는 것으로 ['IWWGCW', 'IWWGDW', 'BASE']
같은 목록에 걸릴이 순서를 변경하려면
Experiment BASE IWWGCW IWWGDW
Lead Time 24 48 24 48 24 48
2010-11-27 12:00:00 0.997 0.991 0.998 0.990 0.998 0.990
2010-11-28 12:00:00 0.998 0.987 0.997 0.990 0.997 0.990
2010-11-29 12:00:00 0.997 0.992 0.997 0.992 0.997 0.992
2010-11-30 12:00:00 0.997 0.987 0.997 0.987 0.997 0.987
2010-12-01 12:00:00 0.996 0.986 0.996 0.986 0.996 0.986
같은 (일) 보이는 데이터 테이블이 다음주의 그와
Experiment IWWGCW IWWGDW BASE
Lead Time 24 48 24 48 24 48
2010-11-27 12:00:00 0.998 0.990 0.998 0.990 0.997 0.991
2010-11-28 12:00:00 0.997 0.990 0.997 0.990 0.998 0.987
2010-11-29 12:00:00 0.997 0.992 0.997 0.992 0.997 0.992
2010-11-30 12:00:00 0.997 0.987 0.997 0.987 0.997 0.987
2010-12-01 12:00:00 0.996 0.986 0.996 0.986 0.996 0.986
을 나는 돈 '실험'수준은 언제나 알 수 없습니다. 나는 시도
df2 = df.reindex_axis(['IWWGCW', 'IWWGDW', 'BASE'], axis=1, level='Experiment')
(df
은 위의 멀티 인덱스 프레임입니다)하지만이 작동하지 않았다 - 성공적으로 완료 되었으나, 반환 된 DataFrame는 열 순서가 변경했다.
내 해결 방법은 같은 기능을하는 것입니다 :
def reorder_columns(frame, column_name, new_order):
"""Shuffle the specified columns of the frame to match new_order."""
index_level = frame.columns.names.index(column_name)
new_position = lambda t: new_order.index(t[index_level])
new_index = sorted(frame.columns, key=new_position)
new_frame = frame.reindex_axis(new_index, axis=1)
return new_frame
reorder_columns(df, 'Experiment', ['IWWGCW', 'IWWGDW', 'BASE'])
내가 기대하지만 추가 작업을하는 것 같은이 느낌인지하지 곳. 이 작업을 수행하는 더 쉬운 방법이 있습니까?
이는 것 같다 https://github.com/pydata/pandas/issues/4088로 해결되었습니다 – MERose
다음 문법입니다 :'df.reindex ([ 'top', 'mid', 'btm'], level = 'first')' https://github.com/pandas-dev/pandas/pull/9019 –