我有一个这样的熊猫数据框。

ID    Name     Gender    Work     BBBB.FullName   BBBB.Sex    BBBB.Occupation
1     Test       M       MIS       Tester             M          GIS


我希望以此方式重新排序,


身份证永远是第一位的
没有BBBB开头的第一列可用列
第一个可用的列以BBBB开头
第二个可用列,无需BBBB开头
第二个可用的列以BBBB开头


预期产量1

ID   Name BBBB.FullName   Gender    BBBB.Sex    BBBB.Work       BBBB.Occupation
1    Test   Tester          M         M           MIS                 GIS


我想将普通列与下一个BBBB列进行比较,并将列插入为True或False

预期产出2

ID   Name BBBB.FullName   Result_Name Gender    BBBB.Sex  Result_Gender   BBBB.Work       BBBB.Occupation  Result_Work
1    Test    Tester       False        M          M          True           GIS            MIS                False

最佳答案

您可以先将列分为以BBBB.开头的列和不以开头的列

standard_cols = [x for x in df.columns if not x.startswith("BBBB.") and x != "ID"]
b_cols = [x for x in df.columns if x.startswith("BBBB.")]


我们可以将它们变成对,然后为每对创建一个结果列,同时构建一个列表,该列表捕获我们想要的顺序以在最后显示这些列

result_column_order = ["ID"]

for plain_col, b_col in zip(standard_cols, b_cols):
    res_name = plain_col + "_Result"
    df[res_name] = df[plain_col] == df[b_col]
    result_column_order.extend([plain_col, b_col, res_name])


然后以所需顺序返回:

df[result_column_order]


哪个返回以下

   ID  Name BBBB.FullName  Name_Result Gender BBBB.Sex  Gender_Result Work  \
0   1  Test        Tester        False      M        M           True  MIS

  BBBB.Occupation  Work_Result
0             GIS        False

08-07 19:50