Noa*_*sen 5 python dataframe pandas
对不起凌乱的标题,我不知道如何很好地表达这个问题.
假设我有一张桌子,其中前三列是foo bar和baz.然后有一些任意列.我想操纵表格,使这些任意列全部折叠在列上,称为num.
一个例子使这更清楚
foo, bar, baz, 100, 101, 102, 103, 104,
1, 1, 1, 10, 11, 12, 13, 14,
1, 1, 2, 15, 16, 17, 18, 19,
1, 2, 1, 20, 21, 22, 23, 24,
Run Code Online (Sandbox Code Playgroud)
此输入应转置为:
num, foo, bar, baz, value,
100, 1, 1, 1, 10,
100, 1, 1, 2, 15,
100, 1, 2, 1, 20,
101, 1, 1, 1, 11,
101, 1, 1, 2, 16,
101, 1, 2, 1, 21,
102, 1, 1, 1, 12,
102, 1, 1, 2, 17,
102, 1, 2, 1, 22,
...
Run Code Online (Sandbox Code Playgroud)
我写了一个自定义Python解决方案来做到这一点.这并不难,但我觉得这是重新发明轮子.
有没有办法用像熊猫或其他一些表操作模块这样的库完成这个?
使用pandas.melt:
res = pd.melt(df, id_vars=['foo', 'bar', 'baz'])
print(res)
foo bar baz variable value
0 1 1 1 100 10
1 1 1 2 100 15
2 1 2 1 100 20
3 1 1 1 101 11
4 1 1 2 101 16
5 1 2 1 101 21
6 1 1 1 102 12
7 1 1 2 102 17
8 1 2 1 102 22
9 1 1 1 103 13
10 1 1 2 103 18
11 1 2 1 103 23
12 1 1 1 104 14
13 1 1 2 104 19
14 1 2 1 104 24
Run Code Online (Sandbox Code Playgroud)