【问题标题】:Reorganization DataFrame based on two columns基于两列重组DataFrame
【发布时间】:2019-07-30 09:30:36
【问题描述】:

如果我有一个看起来像这样的数据框


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

有没有办法重新组织这两列并将其变成这样?

所以 B 列遵循模式 0,1,2 并且 A 列中的每个元素都在每个位置?



    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

【问题讨论】:

    标签: python pandas shuffle


    【解决方案1】:

    你可以这样做:

    df.reindex((j+i*6)%len(df) for i in range(6) for j in range(0,len(df),8))
    

    它为什么有效?您的第一个 012 的索引是 0816,因此您需要一个步长为 8 的范围。

    range(0,len(df),8)

    下一个012的索引是6144,它们等于61422%len(df)。相同的模式移动了 6

    (j+i*6)%len(df)

    6 次获取整个数据集。

    for i in range(6)

    返回:

        A  B
    0   a  0
    8   b  1
    16  c  2
    6   b  0
    14  c  1
    4   a  2
    12  c  0
    2   a  1
    10  b  2
    0   a  0
    8   b  1
    16  c  2
    6   b  0
    14  c  1
    4   a  2
    12  c  0
    2   a  1
    10  b  2
    

    如果需要重置索引:

    df.reindex((j+i*6)%len(df) for i in range(6)
                               for j in range(0,len(df),8)
              ).reset_index(drop=True)
    

    返回

        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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 2015-12-06
      • 1970-01-01
      • 2019-08-05
      • 2018-02-05
      • 1970-01-01
      相关资源
      最近更新 更多