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

pandas入门问题:如何批量将Wife对应行移动到Husband行的下方

现有代码问题排查

  • 你每次调用append时都基于原始df操作,而非逐步累加的df1,会导致最终结果重复出现所有原始数据4次,完全不符合预期
  • Pandas 2.0及以上版本已经废弃append方法,官方推荐使用pd.concat实现数据拼接
  • 你示例数据中存储身份的列名为A,但代码中写的是Relationship,需要和实际列名对齐

正确实现方案

方案1:自定义优先级排序(推荐)

通过设置自定义排序规则,自动将所有行按「Husband → Wife → Kids → Cousin」的顺序排列,同时支持按B列分组后每组独立排序,完美匹配你的两个示例场景:

import pandas as pd

df = pd.read_csv("Test.csv")
# 定义排序优先级,数值越小排越靠前
sort_order = {"Husband": 1, "Wife": 2, "Kids": 3, "Cousin": 4}

# 如果需要按B列(测试类型)分组,每组单独排序,用下面这行
df_result = df.groupby("B", group_keys=False).apply(
    lambda x: x.sort_values("A", key=lambda s: s.map(sort_order))
).reset_index(drop=True)

# 如果不需要分组,全表直接排序,替换为下面这行即可
# df_result = df.sort_values("A", key=lambda s: s.map(sort_order)).reset_index(drop=True)

print(df_result)

方案2:筛选拼接(和你原有思路一致)

如果偏好你原本的分步筛选拼接逻辑,修改为正确的累加写法即可:

import pandas as pd

df = pd.read_csv("Test.csv")
df_result = pd.DataFrame()
# 按需求顺序依次筛选拼接
for identity in ["Husband", "Wife", "Kids", "Cousin"]:
    df_result = pd.concat([df_result, df[df["A"] == identity]], ignore_index=True)

print(df_result)

提示:如果你的实际数据中存储身份的列名是Relationship,把上述代码中所有的"A"替换为"Relationship"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:00