【问题标题】:Python Dataframe: Create columns based on another columnPython Dataframe:基于另一列创建列
【发布时间】:2019-03-29 00:52:59
【问题描述】:

我有一个数据框,其中一列(此处为“A”列)具有重复值,我想转换此数据框,以便根据“A”列的值形成新列。

例子

df = pd.DataFrame({'A':range(4)*3, 'B':range(12),'C':range(12,24)})
df
    A   B   C
0   0   0  12
1   1   1  13
2   2   2  14
3   3   3  15
4   0   4  16
5   1   5  17
6   2   6  18
7   3   7  19
8   0   8  20
9   1   9  21
10  2  10  22
11  3  11  23

注意“A”列的值重复了3次。

现在我想要最简单的解决方案,将其转换为具有此配置的另一个数据框(请忽略列的命名,它仅用于描述目的,它们可以是任何东西):

        B               C
    A0  A1  A2  A3  A0  A1  A2  A3
0   0   1   2   3   12  13  14  15
1   4   5   6   7   16  17  18  19
2   8   9   10  11  20  21  22  23

【问题讨论】:

    标签: python pandas dataframe pivot pivot-table


    【解决方案1】:

    您可能需要assigncumcount 的组帮助键,然后只需执行unstack

    yourdf=df.assign(D=df.groupby('A').cumcount(),A='A'+df.A.astype(str)).set_index(['D','A']).unstack()
       B              C            
    A A0 A1  A2  A3  A0  A1  A2  A3
    D                              
    0  0  1   2   3  12  13  14  15
    1  4  5   6   7  16  17  18  19
    2  8  9  10  11  20  21  22  23
    

    【讨论】:

    • @coldspeed 嗨,冷,你能帮忙吗我不知道......stackoverflow.com/a/55403072/7964527
    • 这很奇怪......我不知道......我在那里对你的两个答案都投了赞成票。 ://
    • @coldspeed 是的,我知道只是害怕我提供了错误的东西:-),似乎只是随机投反对票。:-( 你是最好的人,可以帮我检查答案的准确性; -)
    • 我建议不要担心。有人可能今天过得很糟糕...... :)
    【解决方案2】:

    这是一个pivot 问题,所以使用

    df.assign(idx=df.groupby('A').cumcount()).pivot('idx', 'A', ['B', 'C'])
    
         B              C            
    A    0  1   2   3   0   1   2   3
    idx                              
    0    0  1   2   3  12  13  14  15
    1    4  5   6   7  16  17  18  19
    2    8  9  10  11  20  21  22  23
    

    如果标题很重要,您可以使用MultiIndex.set_levels 来修复它们。

    u = df.assign(idx=df.groupby('A').cumcount()).pivot('idx', 'A', ['B', 'C'])
    u.columns = u.columns.set_levels(
        ['A' + u.columns.levels[1].astype(str)], level=[1])
    u
    
         B              C            
    A   A0 A1  A2  A3  A0  A1  A2  A3
    idx                              
    0    0  1   2   3  12  13  14  15
    1    4  5   6   7  16  17  18  19
    2    8  9  10  11  20  21  22  23
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      相关资源
      最近更新 更多