data = [[1, 'tom', 10, 53, 2, 3, 9, 6 ], [2, 'nick', 1, 53, 2, 23, 4, 7], [3, 'juli', 9, 23, 2, 31, 9, 3]]
df = pd.DataFrame(data, columns = ['ID', 'Name', 'Apple.Food.0', 'Apple.Food.1', 'Apple.Food.2', 'Pear.Food.0', 'Pear.Food.1', 'Pear.Food.2'])
df
ID | 姓名 | 苹果.食物.0 | 苹果.食物.1 | 苹果.食物.2 | 梨.食物.0 | 梨.食物.1 | 梨.食物.2 |
---|---|---|---|---|---|---|---|
1 | 汤姆 | 10 | 53 | 2 | 3 | 9 | 6 |
2 | 尼克 | 1 | 53 | 2 | 23 | 4 | 7 |
3 | 朱莉 | 9 | 23 | 2 | 31 | 9 | 3 |
我想将最后六列展开为如下格式: 即Apple.Food.0 - 将前缀“Apple”展开到行中,将后缀“0”展开到行中,保留“Food”作为列名并将值保留在那里;然后重新生成ID列作为PK。
我尝试使用.str.split()来分裂列,但是值将与所有被分开的列一起出现。有什么内置的Pandas函数可以轻松实现这一点吗?
ID编号 | 名称 | 水果 | 时间 | 食物 |
---|---|---|---|---|
1 | 汤姆 | 苹果 | 0 | 10 |
2 | 汤姆 | 苹果 | 1 | 53 |
3 | 汤姆 | 苹果 | 2 | 2 |
4 | 汤姆 | 梨子 | 0 | 3 |
5 | 汤姆 | 梨子 | 1 | 9 |
6 | 汤姆 | 梨子 | 2 | 6 |
7 | 尼克 | 苹果 | 0 | 1 |
8 | 尼克 | 苹果 | 1 | 53 |
9 | 尼克 | 苹果 | 2 | 2 |
10 | 尼克 | 梨子 | 0 | 23 |
11 | 尼克 | 梨子 | 1 | 4 |
12 | 尼克 | 梨子 | 2 | 7 |
13 | 朱莉 | 苹果 | 0 | 9 |
14 | 朱莉 | 苹果 | 1 | 23 |
15 | 朱莉 | 苹果 | 2 | 2 |
16 | 朱莉 | 梨子 | 0 | 31 |
17 | 朱莉 | 梨子 | 1 | 9 |
18 | 朱莉 | 梨子 | 2 | 3 |