Python 3.x 创建包含多列的dataframe列

Python 3.x 创建包含多列的dataframe列,python-3.x,pandas,Python 3.x,Pandas,我有一个包含大量列的数据框架,我希望将其合并为更多行和更少列。它的结构与下面的示例类似: | 1_a | 1_b | 1_c | 2_a | 2_b | 2_c | d | |-----|-----|-----|-----|-----|-----|-----| | 1 | 2 | 3 | 1 | 2 | 6 | z | | 2 | 2 | 2 | 3 | 2 | 5 | z | | 3 | 2 | 1 | 4 | 1

我有一个包含大量列的数据框架,我希望将其合并为更多行和更少列。它的结构与下面的示例类似:

| 1_a | 1_b | 1_c | 2_a | 2_b | 2_c |  d  |
|-----|-----|-----|-----|-----|-----|-----|
|  1  |  2  |  3  |  1  |  2  |  6  |  z  |
|  2  |  2  |  2  |  3  |  2  |  5  |  z  |
|  3  |  2  |  1  |  4  |  1  |  4  |  z  |
我想合并一些行,使它们如下所示:

| 1 | 2 | letter | d |
|---|---|--------|---|
| 1 | 1 |   a    | z |
| 2 | 3 |   a    | z |
| 3 | 4 |   a    | z |
| 2 | 2 |   b    | z |
| 2 | 2 |   b    | z |
| 2 | 1 |   b    | z |
| 3 | 6 |   c    | z |
| 2 | 5 |   c    | z |
| 1 | 4 |   c    | z |
我已经用新标题创建了一个新的数据框架,但不确定在追加时如何将原始标题映射到新标题


非常感谢,如果您需要动态选择列名,您可能只需要编写一个Python循环。只需手动运行每个字母,然后将它们连接在一起:

dfs = []
for letter in ('a', 'b', 'c'):
     group = df[['d']]
     group['1'] = df['1_' + letter]
     group['2'] = df['2_' + letter]
     group['letter'] = letter
     dfs.append(group)
result = pd.concat(dfs)
试一试


嘿,瓦伊沙利,谢谢你的回答,我想我已经开始工作了,我只有两个问题需要了解。1为什么在开始时将索引设置为d列2 stack()如何知道将每个头元组的第一部分设置为头,将第二部分设置为行索引(在reset_index()之前)。最好将d列设置为索引,否则即使它将被拆分为多索引,级别0为d,级别1为NaN。对于第二个qn,如果您查看stack的文档,默认情况下,它将堆叠在级别1上,在本例中为1和2,这将提供所需的输出。我建议您打破上述解决方案,看看会发生什么每一步之后
df = df.set_index('d')
df.columns = pd.MultiIndex.from_tuples([tuple(c.split('_')) for c in df.columns])
df = df.stack().reset_index().rename(columns = {'level_1' : 'letter'})

    d   letter  1   2
0   z   a       1   1
1   z   b       2   2
2   z   c       3   6
3   z   a       2   3
4   z   b       2   2
5   z   c       2   5
6   z   a       3   4
7   z   b       2   1
8   z   c       1   4