Pandas 在数据帧中,在透视表但希望将值堆叠在另一个值之下之后?

Pandas 在数据帧中,在透视表但希望将值堆叠在另一个值之下之后?,pandas,dataframe,pivot,Pandas,Dataframe,Pivot,这是输出,但我希望zoo的值低于baz,并有另一列显示baz/zoo df.pivot(index='foo', columns='bar', values=['baz', 'zoo']) baz zoo bar A B C A B C foo one 1 2 3 x y z two 4 5 6 q w t 您可以使用stack并指示要以长格式堆叠的级别: import pandas as pd import numpy

这是输出,但我希望zoo的值低于baz,并有另一列显示baz/zoo

df.pivot(index='foo', columns='bar', values=['baz', 'zoo'])
      baz       zoo
bar   A  B  C   A  B  C
foo
one   1  2  3   x  y  z
two   4  5  6   q  w  t

您可以使用
stack
并指示要以长格式堆叠的级别:

import pandas as pd
import numpy as np
idx = pd.MultiIndex.from_product([['bar', 'zoo'], ['A', 'B', 'C']])
df = pd.DataFrame(np.random.randn(6, 6), columns=idx)
这是我的数据帧(看起来与您的类似):

然后将
堆栈
与级别0一起使用:

df.stack(level=0)
结果是:

              A         B         C
0 bar  0.142700 -0.127700  1.914858
  zoo  1.900361 -0.038232 -0.620576
1 bar  1.772417 -1.362563  0.339079
  zoo  0.893481  0.000487  0.270656
2 bar -0.707328 -0.562236  0.435146
如果希望
bar/zoo
位于列而不是多索引中,请重置此级别的索引:

new_df = new_df.reset_index(level=1)

我不知道最初的df是什么样子的,这就是为什么我使用您提供的样本。但是您可能可以在一个操作中完成这项操作,而不是在原始数据帧上执行
pivot
然后
stack

我认为您需要在旋转之前分割列,然后更改
值中的顺序
参数:

print (df)
   foo bar  baz  zoo
0  one   A    1    3
1  one   B    2    4
2  one   C    3    6
3  two   A    4    5
4  two   B    5    2
5  two   C    6    4

df['baz/zoo'] = df['baz'].div(df['zoo'])
df = df.pivot(index='foo', columns='bar', values=['zoo','baz','baz/zoo'])
print (df)
     zoo            baz             baz/zoo          
bar    A    B    C    A    B    C         A    B    C
foo                                                  
one  3.0  4.0  6.0  1.0  2.0  3.0  0.333333  0.5  0.5
two  5.0  2.0  4.0  4.0  5.0  6.0  0.800000  2.5  1.5

你能添加预期的输出吗?什么意思
想让zoo的值低于baz
print (df)
   foo bar  baz  zoo
0  one   A    1    3
1  one   B    2    4
2  one   C    3    6
3  two   A    4    5
4  two   B    5    2
5  two   C    6    4

df['baz/zoo'] = df['baz'].div(df['zoo'])
df = df.pivot(index='foo', columns='bar', values=['zoo','baz','baz/zoo'])
print (df)
     zoo            baz             baz/zoo          
bar    A    B    C    A    B    C         A    B    C
foo                                                  
one  3.0  4.0  6.0  1.0  2.0  3.0  0.333333  0.5  0.5
two  5.0  2.0  4.0  4.0  5.0  6.0  0.800000  2.5  1.5