Sütun düzeylerine eklenmiş, çok indeksli bir DataFrame
elimde var. Kullanıcıların belirttikleri sırayla eşleşmeleri için sütunları kolayca karıştırmak isterim. Bu, boru hattından aşağı doğru olduğundan, this recommended solution'u kullanamıyorum ve bunları oluşturma zamanında düzgün bir şekilde sipariş edemiyorum.Çoklu dizinli veri çerçevesi sütunlarını belirli bir düzeyde nasıl yeniden düzenleyebilirim?
Olmam ['IWWGCW', 'IWWGDW', 'BASE']
gibi bir listede alıp bu yeniden sıralamak istiyorum
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
gibi (bir şey) görünen bir veri tablosu vardır: uyarı bununla
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
ı don Herzaman hangi seviyede olduğunu bilirsiniz "Deneme". Denedim
df2 = df.reindex_axis(['IWWGCW', 'IWWGDW', 'BASE'], axis=1, level='Experiment')
(df
yukarıda gösterilen çoklu endeksli çerçeve olduğu) ama bu işe görünmüyordu - bu başarıyla tamamlandı, ancak iade edildi DataFrame onun sütun sırası değişmeden kaldı.
Benim geçici çözüm gibi bir işlevi sahip olmaktır:
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'])
beklediğim ama ekstra çalışma yapıyor gibi hissediyor onu yapar nerede. Bunu yapmanın daha kolay bir yolu var mı?
bu vardır görünüyor https://github.com/pydata/pandas/issues/4088 – MERose
ile çözüldü. Bu sözdizimi: df.reindex (['üst', 'orta', 'btm'], seviye = 'ilk') ' https://github.com/pandas-dev/pandas/pull/9019 –