Python 如何通过固定唯一列来展开/重塑多维数据帧?
我正在尝试创建一个数据帧。因此,考虑下面的<代码> df>代码>: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
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