Python数据框:基于另一列创建列

时间:2019-03-29 00:53:00

标签: python pandas dataframe pivot pivot-table

我有一个数据框,该数据框的一列(此处为“ 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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

这是一个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