gpt4 book ai didi

python - 如何在特定级别重新排序多索引数据框列

转载 作者:IT老高 更新时间:2023-10-28 21:03:04 26 4
gpt4 key购买 nike

我有一个多索引的 DataFrame 名称附加到列级别。我希望能够轻松地打乱列,使它们与用户指定的顺序相匹配。由于这是在管道中,我无法使用 this recommended solution并在创建时正确排序。

我有一个看起来(有点)像的数据表

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

我想获取像 ['IWWGCW', 'IWWGDW', 'BASE'] 这样的列表并将其重新排序为:

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

需要注意的是,我并不总是知道“实验”会达到什么级别。我试过(其中 df 是上面显示的多索引框架)

df2 = df.reindex_axis(['IWWGCW', 'IWWGDW', 'BASE'], axis=1, level='Experiment')

但这似乎不起作用 - 它成功完成,但返回的 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

where reorder_columns(df, 'Experiment', ['IWWGCW', 'IWWGDW', 'BASE']) 符合我的预期,但感觉就像我在做额外的工作。有没有更简单的方法来做到这一点?

最佳答案

有一个非常简单的方法:只需在原始数据框的基础上创建一个新的数据框,多索引列的正确顺序即可:

multi_tuples = [('IWWGCW',24), ('IWWGCW',48), ('IWWGDW',24), ('IWWGDW',48)
, ('BASE',24), ('BASE',48)]

multi_cols = pd.MultiIndex.from_tuples(multi_tuples, names=['Experiment', 'Lead Time'])

df_ordered_multi_cols = pd.DataFrame(df_ori, columns=multi_cols)

关于python - 如何在特定级别重新排序多索引数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11194610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com