Python 使用多个值列重塑数据帧
我正在努力重塑一些熊猫。 我有这个数据框:Python 使用多个值列重塑数据帧,python,pandas,Python,Pandas,我正在努力重塑一些熊猫。 我有这个数据框: +---------+----------+----------+----------+------------+ | Column1 | Sample 1 | Sample 2 | Sample 3 | Identifier | +---------+----------+----------+----------+------------+ | 11 | 1.0 | 1.1 | 1.3 | ABC
+---------+----------+----------+----------+------------+
| Column1 | Sample 1 | Sample 2 | Sample 3 | Identifier |
+---------+----------+----------+----------+------------+
| 11 | 1.0 | 1.1 | 1.3 | ABC |
| 12 | 2.0 | 1.9 | 2.2 | ABC |
| 13 | 6.7 | 2.3 | 8.9 | ABC |
| 11 | 1.0 | 1.1 | 1.3 | DEF |
| 12 | 2.0 | 1.9 | 2.2 | DEF |
| 13 | 6.7 | 2.3 | 8.9 | DEF |
+---------+----------+----------+----------+------------+
我想把它改造成这样:
+---------+--------+------------+--------+
| Column1 | Sample | Identifier | Result |
+---------+--------+------------+--------+
| 11 | 1 | ABC | 1.0 |
| 11 | 2 | ABC | 1.1 |
| 11 | 3 | ABC | 1.3 |
| 11 | 1 | DEF | 1.0 |
| 11 | 2 | DEF | 1.1 |
| 11 | 3 | DEF | 1.3 |
| 12 | 1 | ABC | 2.0 |
| 12 | 2 | ABC | 1.9 |
| 12 | 3 | ABC | 2.2 |
| ... | | | |
+---------+--------+------------+--------+
本质上,它是在一个非常糟糕的excel表格中给出的,表格中有重复的样本作为列的集合
理想情况下,我希望Column1作为最终的列标题,Sample和Identifier作为索引,Result作为值,但我知道我需要它在上面的形状中使用df.pivot进行相对严格的操作,以防您知道从我的源到最终目的地的方法比我的方法简单一些。尝试以下方法:
df.rename(columns=lambda x: x.split(' ')[-1])\
.melt(['Column1', 'Identifier'], var_name='Sample', value_name='Result')
输出:
Column1 Identifier Sample Result
0 11 ABC 1 1.0
1 12 ABC 1 2.0
2 13 ABC 1 6.7
3 11 DEF 1 1.0
4 12 DEF 1 2.0
5 13 DEF 1 6.7
6 11 ABC 2 1.1
7 12 ABC 2 1.9
8 13 ABC 2 2.3
9 11 DEF 2 1.1
10 12 DEF 2 1.9
11 13 DEF 2 2.3
12 11 ABC 3 1.3
13 12 ABC 3 2.2
14 13 ABC 3 8.9
15 11 DEF 3 1.3
16 12 DEF 3 2.2
17 13 DEF 3 8.9
Column1 Identifier Sample Result
0 11 ABC 1 1.0
1 12 ABC 1 2.0
2 13 ABC 1 6.7
3 11 DEF 1 1.0
4 12 DEF 1 2.0
5 13 DEF 1 6.7
6 11 ABC 2 1.1
7 12 ABC 2 1.9
8 13 ABC 2 2.3
9 11 DEF 2 1.1
10 12 DEF 2 1.9
11 13 DEF 2 2.3
12 11 ABC 3 1.3
13 12 ABC 3 2.2
14 13 ABC 3 8.9
15 11 DEF 3 1.3
16 12 DEF 3 2.2
17 13 DEF 3 8.9
详情:
使用拆分将“示例X”重命名为“X”。
使用“Column1”和“Identifier”作为索引融化数据帧
重命名变量和值名称。尝试以下操作:
df.rename(columns=lambda x: x.split(' ')[-1])\
.melt(['Column1', 'Identifier'], var_name='Sample', value_name='Result')
输出:
Column1 Identifier Sample Result
0 11 ABC 1 1.0
1 12 ABC 1 2.0
2 13 ABC 1 6.7
3 11 DEF 1 1.0
4 12 DEF 1 2.0
5 13 DEF 1 6.7
6 11 ABC 2 1.1
7 12 ABC 2 1.9
8 13 ABC 2 2.3
9 11 DEF 2 1.1
10 12 DEF 2 1.9
11 13 DEF 2 2.3
12 11 ABC 3 1.3
13 12 ABC 3 2.2
14 13 ABC 3 8.9
15 11 DEF 3 1.3
16 12 DEF 3 2.2
17 13 DEF 3 8.9
Column1 Identifier Sample Result
0 11 ABC 1 1.0
1 12 ABC 1 2.0
2 13 ABC 1 6.7
3 11 DEF 1 1.0
4 12 DEF 1 2.0
5 13 DEF 1 6.7
6 11 ABC 2 1.1
7 12 ABC 2 1.9
8 13 ABC 2 2.3
9 11 DEF 2 1.1
10 12 DEF 2 1.9
11 13 DEF 2 2.3
12 11 ABC 3 1.3
13 12 ABC 3 2.2
14 13 ABC 3 8.9
15 11 DEF 3 1.3
16 12 DEF 3 2.2
17 13 DEF 3 8.9
详情:
使用拆分将“示例X”重命名为“X”。
使用“Column1”和“Identifier”作为索引融化数据帧
重命名变量和值名称。请尝试:
或pd.wide_至_long:
输出:
Column1 Identifier Sample Result
0 11 ABC 1 1.0
1 12 ABC 1 2.0
2 13 ABC 1 6.7
3 11 DEF 1 1.0
4 12 DEF 1 2.0
5 13 DEF 1 6.7
6 11 ABC 2 1.1
7 12 ABC 2 1.9
8 13 ABC 2 2.3
9 11 DEF 2 1.1
10 12 DEF 2 1.9
11 13 DEF 2 2.3
12 11 ABC 3 1.3
13 12 ABC 3 2.2
14 13 ABC 3 8.9
15 11 DEF 3 1.3
16 12 DEF 3 2.2
17 13 DEF 3 8.9
Column1 Identifier Sample Result
0 11 ABC 1 1.0
1 12 ABC 1 2.0
2 13 ABC 1 6.7
3 11 DEF 1 1.0
4 12 DEF 1 2.0
5 13 DEF 1 6.7
6 11 ABC 2 1.1
7 12 ABC 2 1.9
8 13 ABC 2 2.3
9 11 DEF 2 1.1
10 12 DEF 2 1.9
11 13 DEF 2 2.3
12 11 ABC 3 1.3
13 12 ABC 3 2.2
14 13 ABC 3 8.9
15 11 DEF 3 1.3
16 12 DEF 3 2.2
17 13 DEF 3 8.9
尝试熔化:
或pd.wide_至_long:
输出:
Column1 Identifier Sample Result
0 11 ABC 1 1.0
1 12 ABC 1 2.0
2 13 ABC 1 6.7
3 11 DEF 1 1.0
4 12 DEF 1 2.0
5 13 DEF 1 6.7
6 11 ABC 2 1.1
7 12 ABC 2 1.9
8 13 ABC 2 2.3
9 11 DEF 2 1.1
10 12 DEF 2 1.9
11 13 DEF 2 2.3
12 11 ABC 3 1.3
13 12 ABC 3 2.2
14 13 ABC 3 8.9
15 11 DEF 3 1.3
16 12 DEF 3 2.2
17 13 DEF 3 8.9
Column1 Identifier Sample Result
0 11 ABC 1 1.0
1 12 ABC 1 2.0
2 13 ABC 1 6.7
3 11 DEF 1 1.0
4 12 DEF 1 2.0
5 13 DEF 1 6.7
6 11 ABC 2 1.1
7 12 ABC 2 1.9
8 13 ABC 2 2.3
9 11 DEF 2 1.1
10 12 DEF 2 1.9
11 13 DEF 2 2.3
12 11 ABC 3 1.3
13 12 ABC 3 2.2
14 13 ABC 3 8.9
15 11 DEF 3 1.3
16 12 DEF 3 2.2
17 13 DEF 3 8.9
谢谢@Quang-melt工作了一顿款待谢谢@Quang-melt工作了一顿款待