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

基于两列重组DataFrame:按指定模式重排A、B列的实现方法

实现DataFrame的特定重组需求

嗨,我来帮你解决这个DataFrame重组的问题!先明确下你的需求:把原始那种每个A类(a/b/c)对应B列0、1、2各两次的结构,改成B列固定循环0→1→2,同时A列的元素按特定轮换顺序填充的目标结构对吧?完全可以做到,下面是具体的实现方法:

先还原你的原始数据

首先咱们先把你给出的原始DataFrame用代码定义出来,方便后续测试:

import pandas as pd

# 原始DataFrame
df = pd.DataFrame({
    'A': ['a']*6 + ['b']*6 + ['c']*6,
    'B': [0,0,1,1,2,2]*3
})

分析目标结构的规律

观察你要的目标结果,能发现两个关键点:

  • B列是0、1、2无限循环,总共18行,也就是循环6次;
  • A列的元素是按[a,b,c, b,c,a, c,a,b]这个9行的核心块重复两次组成的,刚好匹配18行的长度。

代码实现重组

基于这个规律,我们可以直接用numpy.tile来快速生成重复序列,组合成目标DataFrame:

import numpy as np

# 定义A列的核心轮换模式
core_a_sequence = ['a', 'b', 'c', 'b', 'c', 'a', 'c', 'a', 'b']
# 生成完整的A列:核心块重复2次
new_A = np.tile(core_a_sequence, 2)
# 生成完整的B列:0、1、2循环6次
new_B = np.tile([0, 1, 2], 6)
# 组合成新的DataFrame
target_df = pd.DataFrame({'A': new_A, 'B': new_B})

验证结果

运行上面的代码后,打印target_df就能得到你想要的结果:

A  B
0   a  0
1   b  1
2   c  2
3   b  0
4   c  1
5   a  2
6   c  0
7   a  1
8   b  2
9   a  0
10  b  1
11  c  2
12  b  0
13  c  1
14  a  2
15  c  0
16  a  1
17  b  2

如果以后你的A类数量或者总行数有变化,也可以基于A的唯一值动态生成轮换序列,但针对你当前的固定需求,上面的方法是最直接高效的~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:33:01