我正在尝试做与 Pandas 相反的事情。想知道是否有人可以提供帮助?尝试从下面转换数据

|Date|A|B|C|D|E |
|----|-|-|-|-|--|
|2005|1|2|3|4|50|
|2006|6|7|8|9|10|


|Date|X|Val|
|----|-|---|
|2005|A|1  |
|2005|B|2  |
|2005|C|3  |
etc
|2006|A|6  |
etc
|2006|E|10 |

非常感谢你

最佳答案

结合使用 set_index stack :

df = df.set_index('Date').stack().reset_index(name='Val').rename(columns={'level_1':'X'})
print (df)
   Date  X  Val
0  2005  A    1
1  2005  B    2
2  2005  C    3
3  2005  D    4
4  2005  E   50
5  2006  A    6
6  2006  B    7
7  2006  C    8
8  2006  D    9
9  2006  E   10

melt ,但是值的顺序不同:
df = df.melt('Date', var_name='X', value_name='Val')
print (df)
   Date  X  Val
0  2005  A    1
1  2006  A    6
2  2005  B    2
3  2006  B    7
4  2005  C    3
5  2006  C    8
6  2005  D    4
7  2006  D    9
8  2005  E   50
9  2006  E   10

因此,对于相同的输出,添加 sort_values :
df = (df.melt('Date', var_name='X', value_name='Val')
        .sort_values(['Date','X'])
        .reset_index(drop=True))
print (df)
   Date  X  Val
0  2005  A    1
1  2005  B    2
2  2005  C    3
3  2005  D    4
4  2005  E   50
5  2006  A    6
6  2006  B    7
7  2006  C    8
8  2006  D    9
9  2006  E   10

关于python - 在Pandas Python中做与Pivot相反的事情,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48135994/

10-11 06:20