Python 如何通过固定唯一列来展开/重塑多维数据帧?

Python 如何通过固定唯一列来展开/重塑多维数据帧?,python,python-3.x,pandas,Python,Python 3.x,Pandas,我正在尝试创建一个数据帧。因此,考虑下面的 df>代码>: 0 1 2 3 4 5 6 7 8 unique_id Apple (Date 09/21/2016) NaN NaN NaN NaN NaN NaN NaN NaN 101 bannana (Date 09/30/2016) NaN NaN NaN NaN NaN NaN

我正在尝试创建一个数据帧。因此,考虑下面的<代码> df>代码>:

    0   1   2   3   4   5   6   7   8   unique_id
Apple (Date 09/21/2016)     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     101
bannana (Date 09/30/2016)   NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     102
cherry (New 04/05/2016)     tomatoes (New 04/07/2016)   potatoes (Date 11/08/2016)  pineapples (Date 04/11/2016)    carrots (Date 11/01/2016)   NaN     NaN     NaN     NaN     103
coconuts (Date 11/10/2016)  NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     104
oranges (Date 11/01/2016)   watermelon (Date 11/07/2016)    pears (Date 11/08/2016)     carrots (Date 11/01/2016)   blackberry (New 01/22/2015)     NaN     NaN     NaN     NaN     105
kiwi (Date 11/09/2016)  carrots (Date 11/01/2016)   NaN     NaN     NaN     NaN     NaN     NaN     NaN     106
如何按以下方式将
unique\u id
列设置为唯一索引<代码>(*):

对于上面的内容,我尝试使用和方法将
unique\u id
列设置为索引,以便将其用作“轴”:


但是,我想我正在使这项任务复杂化,因此如何重新索引数据帧以获得
(*)

如果不需要具有
NaN
值的行,请与和一起使用:

如果需要
NaN
使用:

df = df.set_index('unique_id')
       .stack(dropna=False)
       .reset_index(level=1, drop=True)
       .reset_index(name='a')

print (df)
    unique_id                             a
0         101       Apple (Date 09/21/2016)
1         101                           NaN
2         101                           NaN
3         101                           NaN
4         101                           NaN
5         101                           NaN
6         101                           NaN
7         101                           NaN
8         101                           NaN
9         102     bannana (Date 09/30/2016)
10        102                           NaN
11        102                           NaN
12        102                           NaN
13        102                           NaN
14        102                           NaN
15        102                           NaN
16        102                           NaN
17        102                           NaN
18        103       cherry (New 04/05/2016)
19        103     tomatoes (New 04/07/2016)
20        103    potatoes (Date 11/08/2016)
21        103  pineapples (Date 04/11/2016)
22        103     carrots (Date 11/01/2016)
23        103                           NaN
24        103                           NaN
25        103                           NaN
26        103                           NaN
27        104    coconuts (Date 11/10/2016)
28        104                           NaN
29        104                           NaN
30        104                           NaN
31        104                           NaN
32        104                           NaN
33        104                           NaN
34        104                           NaN
35        104                           NaN
36        105     oranges (Date 11/01/2016)
37        105  watermelon (Date 11/07/2016)
38        105       pears (Date 11/08/2016)
39        105     carrots (Date 11/01/2016)
40        105   blackberry (New 01/22/2015)
41        105                           NaN
42        105                           NaN
43        105                           NaN
44        105                           NaN
45        106        kiwi (Date 11/09/2016)
46        106     carrots (Date 11/01/2016)
47        106                           NaN
48        106                           NaN
49        106                           NaN
50        106                           NaN
51        106                           NaN
52        106                           NaN
53        106                           NaN

谢谢,我正在检查解决方案,请稍候!不过,我不想把Unique_id作为列名,因为它对我来说并不独特!类似的,你可以登记。嘿@jezrael,不修一个怎么样?。有可能吗?我试过:
f=df.set_index(['0_x','1_x']).stack().reset_index(level=1,drop=True)。reset_index(name='a')
。尽管如此,我还是得到了:
Keyerror
我认为如果使用
set\u index
和两列,你会得到明显的
MultiIndex
和3个级别,如果
.reset\u index(级别=1,drop=True)
你只删除了一个级别。可能需要添加
.reset_index(level=[0,1],drop=True)
,但最好是用样本数据和所需输出发布新问题。
df = pd.DataFrame(df.stack().reset_index(drop=False))
df['col-index'] = df['unique_id']
df = df.set_index('col-index')
df = df.set_index('unique_id')
       .stack()
       .reset_index(level=1, drop=True)
       .reset_index(name='a')

print (df)
    unique_id                             a
0         101       Apple (Date 09/21/2016)
1         102     bannana (Date 09/30/2016)
2         103       cherry (New 04/05/2016)
3         103     tomatoes (New 04/07/2016)
4         103    potatoes (Date 11/08/2016)
5         103  pineapples (Date 04/11/2016)
6         103     carrots (Date 11/01/2016)
7         104    coconuts (Date 11/10/2016)
8         105     oranges (Date 11/01/2016)
9         105  watermelon (Date 11/07/2016)
10        105       pears (Date 11/08/2016)
11        105     carrots (Date 11/01/2016)
12        105   blackberry (New 01/22/2015)
13        106        kiwi (Date 11/09/2016)
14        106     carrots (Date 11/01/2016)
df = df.set_index('unique_id')
       .stack(dropna=False)
       .reset_index(level=1, drop=True)
       .reset_index(name='a')

print (df)
    unique_id                             a
0         101       Apple (Date 09/21/2016)
1         101                           NaN
2         101                           NaN
3         101                           NaN
4         101                           NaN
5         101                           NaN
6         101                           NaN
7         101                           NaN
8         101                           NaN
9         102     bannana (Date 09/30/2016)
10        102                           NaN
11        102                           NaN
12        102                           NaN
13        102                           NaN
14        102                           NaN
15        102                           NaN
16        102                           NaN
17        102                           NaN
18        103       cherry (New 04/05/2016)
19        103     tomatoes (New 04/07/2016)
20        103    potatoes (Date 11/08/2016)
21        103  pineapples (Date 04/11/2016)
22        103     carrots (Date 11/01/2016)
23        103                           NaN
24        103                           NaN
25        103                           NaN
26        103                           NaN
27        104    coconuts (Date 11/10/2016)
28        104                           NaN
29        104                           NaN
30        104                           NaN
31        104                           NaN
32        104                           NaN
33        104                           NaN
34        104                           NaN
35        104                           NaN
36        105     oranges (Date 11/01/2016)
37        105  watermelon (Date 11/07/2016)
38        105       pears (Date 11/08/2016)
39        105     carrots (Date 11/01/2016)
40        105   blackberry (New 01/22/2015)
41        105                           NaN
42        105                           NaN
43        105                           NaN
44        105                           NaN
45        106        kiwi (Date 11/09/2016)
46        106     carrots (Date 11/01/2016)
47        106                           NaN
48        106                           NaN
49        106                           NaN
50        106                           NaN
51        106                           NaN
52        106                           NaN
53        106                           NaN