Python 熊猫-按字符串对列重新排序包含概念并在它们之间进行比较
我有一个像这样的熊猫数据框Python 熊猫-按字符串对列重新排序包含概念并在它们之间进行比较,python,pandas,Python,Pandas,我有一个像这样的熊猫数据框 ID Name Gender Work BBBB.FullName BBBB.Sex BBBB.Occupation 1 Test M MIS Tester M GIS 我想把它改成这样 我总是第一 不以BBBB开头的第一个可用列 以BBBB开头的第一个可用列 不以BBBB开头的第二个可用列 第二个可用列以BBBB开头 预期产出1 ID N
ID Name Gender Work BBBB.FullName BBBB.Sex BBBB.Occupation
1 Test M MIS Tester M GIS
我想把它改成这样
ID Name BBBB.FullName Gender BBBB.Sex BBBB.Work BBBB.Occupation
1 Test Tester M M MIS GIS
我想比较normal列和下一个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
老实说,如果您愿意在合并前使用后缀并重命名一帧中的列,我认为您可以极大地简化您的生活。排序使所有内容彼此相邻很简单,列stubnames上的一个groupby为所有成对的组获取结果
列。使用'ID'
作为索引在这一点上可能是一个不错的主意。@ALollz是这门语言的新蜜蜂。所以,我在这里进行实验和学习。非常感谢。