我有一个这样的熊猫数据框。
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