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 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
推荐阅读
- count - 循环内变量为数据子集获取的唯一值的数量
- ruby-on-rails - 我应该如何在 github 上的工作流文件中安装 libmysqlclient.so.20?
- angular - 如果未返回所需的响应,则在 http 请求管道中使用 rxjs repeatWhen 以重复请求
- python - Matplotlib 3D散点图cmap
- python - 转换为张量会改变像素值?
- html - CSS overflow-x: hidden 使某些元素在移动设备上上下移动
- unit-testing - 模拟器中firebase规则的简单单元测试总是失败
- ios - 使用多个平台分发 xcframework 的 Pod 验证失败
- azure - 如何使用 databricks 将一个 azure 数据湖容器中的所有内容传输到另一个容器?
- lambda - Lambda Calculus 中的pair/vireo 访问如何工作?