根据数据库中数据帧中的顺序重新排列列

2024-06-06 10:48:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框

df_in = pd.DataFrame([[1,2,3,4,5,6,7,8,9]], columns=["ab","ef","cd","ij","klm","kln","ghw","ghx","klo"])

我有另一个数据帧,其中定义了顺序

df_order = pd.DataFrame([["ab","gh"],["cd","ij"],["ef","kl"]], columns=["col1","col2"])

我想用下面的方法使用df_顺序重新排列数据帧df_中的列

第一列名称出现在col1中,然后所有以字符串开头的列出现在col2中。然后,列名称出现在col1中,然后所有以字符串开头的列出现在col2中,然后再次出现在下一行并重复

预期产出:

df_out = pd.DataFrame([[1,7,8,3,4,2,5,6,9]], columns=["ab","ghw","ghx","cd","ij","ef","klm","kln","klo"])

怎么做


Tags: columns数据dataframedfabcdcol2col1
1条回答
网友
1楼 · 发布于 2024-06-06 10:48:07

这是一个你可以尝试的解决方案

from itertools import chain

# create a numeric index for each key to sort latter.
order_ = {
    v: idx for idx, v in enumerate(chain.from_iterable(df_order.to_numpy()))
}

df_in.loc[:, sorted(df_in.columns, key=lambda x: order_[x[:2]])]

   ab  ghw  ghx  cd  ij  ef  klm  kln  klo
0   1    7    8   3   4   2    5    6    9

相关问题 更多 >