You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中满足条件时重排DataFrame的词语顺序?

解决方案

核心思路

针对5万行大数据量,优先采用向量化操作(避免循环提升效率),先精准筛选需要修改的行,再批量更新Addressee列并标记修改状态。

步骤1:明确筛选条件

需要修改的行需同时满足:

  • Title 为 Mrs./Ms./Miss 中的任意一种
  • SpFirstName 和 SpLastName 不为空(即存在配偶信息)
  • Addressee 格式为「本人全名 + and + 配偶全名」(即当前本人姓名在前,配偶姓名在后)

步骤2:实现代码

import pandas as pd
import numpy as np

# 读取数据
df = pd.read_csv(csv_file, encoding='latin-1')

# 初始化修改标记列,空字符串表示未修改
df['Rearrange'] = ''
# 将NaN替换为空字符串,方便后续非空判断
df = df.replace(np.nan, '')
# 可选:添加ID列用于追踪原始行(不需要可删除)
df.insert(0, 'ID', range(len(df)))

# --------------------------
# 关键处理逻辑
# --------------------------
# 定义需要匹配的头衔集合
target_titles = {'Mrs.', 'Ms.', 'Miss'}
# 构建筛选掩码:匹配头衔+有配偶信息+Addressee是本人在前的格式
mask = (
    df['Title'].isin(target_titles)
    & (df['SpFirstName'] != '')
    & (df['SpLastName'] != '')
    & df['Addressee'].str.startswith(df['FirstName'] + ' ' + df['LastName'] + ' and ')
)

# 对符合条件的行,重排Addressee为「配偶全名 + and + 本人全名」
df.loc[mask, 'Addressee'] = df.loc[mask].apply(
    lambda row: f"{row['SpFirstName']} {row['SpLastName']} and {row['FirstName']} {row['LastName']}",
    axis=1
)
# 给修改过的行标记1
df.loc[mask, 'Rearrange'] = '1'

# --------------------------
# 后续统计与清理
# --------------------------
# 拆分修改/未修改的数据(用copy避免链式赋值警告)
changed = df[df['Rearrange'] != ''].copy()
unchanged = df[df['Rearrange'] == ''].copy()

# 清理ID列(不需要可删除)
del changed['ID']
del unchanged['ID']

# 输出统计结果
total_rows = len(df)
changed_count = len(changed)
unchanged_count = total_rows - changed_count

print(f"总共有 {total_rows} 行数据,其中 {unchanged_count} 行未修改,{changed_count} 行已重排")
# 查看修改标记的分布
print(changed['Rearrange'].value_counts())

代码说明

  1. 高效筛选:用掩码mask一次性定位所有符合条件的行,比循环遍历效率提升数倍,适配5万行的大数据量。
  2. 精准匹配:通过str.startswith判断Addressee的格式,避免误修改单独姓名、带中间名的姓名等其他变体。
  3. 批量更新:用df.loc[mask]批量修改目标行,避免逐行操作的低效问题。

验证效果

运行后,符合条件的行(如原数据第1行)会被重排为John Doe and Jane Doe,并在Rearrange列标记1,其他行保持不变,完全匹配预期结果。

内容的提问来源于stack exchange,提问作者feelsgood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 23:36:20