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

如何实现Pandas DataFrame分组交替重排?已尝试reset_index无效

问题:如何交错排列Pandas DataFrame的分组行

原始DataFrame:

import pandas as pd
df = pd.DataFrame({"col1": [0,0,0,1,1,1], "col2": ["a", "b", "c", "D", "E", "F"] })

需要转换为:

df_new = pd.DataFrame({"col1": [0,1,0,1,0,1], "col2": ["a", "D", "b", "E", "c", "F"] })

已尝试的操作:

  • 执行df.reset_index(),仅添加了索引列,未改变行顺序:
index  col1 col2
0      0     0    a
1      1     0    b
2      2     0    c
3      3     1    D
4      4     1    E
5      5     1    F
  • 执行df_test.reindex(),未对原DataFrame产生任何修改。

解决方案

方法一:分组后手动交错合并

先按col1拆分出两个分组,再通过循环交错拼接每组的对应行:

# 拆分分组并重置索引
group0 = df[df["col1"] == 0].reset_index(drop=True)
group1 = df[df["col1"] == 1].reset_index(drop=True)

# 交错合并行
rows = []
for r0, r1 in zip(group0.itertuples(index=False), group1.itertuples(index=False)):
    rows.append(r0)
    rows.append(r1)

# 生成新DataFrame
df_new = pd.DataFrame(rows, columns=df.columns)

方法二:利用分组序号排序(更简洁通用)

给每个分组内的行添加序号,再按序号排序实现交错排列,适用于任意行数相同的多分组场景:

# 给每个col1分组的行添加递增序号
df["rank"] = df.groupby("col1").cumcount()

# 按序号排序,清理临时列
df_new = df.sort_values("rank").reset_index(drop=True).drop("rank", axis=1)

执行后df_new的输出即为目标结果:

col1 col2
0     0    a
1     1    D
2     0    b
3     1    E
4     0    c
5     1    F

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:25:22