如何实现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
相关产品推荐
相关产品推荐

