Pandas 在数据帧中,在透视表但希望将值堆叠在另一个值之下之后?
这是输出,但我希望zoo的值低于baz,并有另一列显示baz/zooPandas 在数据帧中,在透视表但希望将值堆叠在另一个值之下之后?,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
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