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