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工作了一顿款待