猿问

Python Dataframe:基于另一列创建列

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


繁花如伊
浏览 211回答 2
2回答

胡子哥哥

这是一个pivot问题,所以使用df.assign(idx=df.groupby('A').cumcount()).pivot('idx', 'A', ['B', 'C'])     B              C            A    0  1   2   3   0   1   2   3idx                              0    0  1   2   3  12  13  14  151    4  5   6   7  16  17  18  192    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  A3idx                              0    0  1   2   3  12  13  14  151    4  5   6   7  16  17  18  192    8  9  10  11  20  21  22  23

守着一只汪

您可能需要assigngroup help key by cumcount,然后执行unstackyourdf=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  A3D                              0  0  1   2   3  12  13  14  151  4  5   6   7  16  17  18  192  8  9  10  11  20  21  22  23
随时随地看视频慕课网APP

相关分类

Python
我要回答