Pandas 使用堆栈/取消堆栈重塑数据帧
我有一个如下所示的数据帧:Pandas 使用堆栈/取消堆栈重塑数据帧,pandas,dataframe,stack,pivot,multi-index,Pandas,Dataframe,Stack,Pivot,Multi Index,我有一个如下所示的数据帧: df1 = pd.DataFrame({'Type' : ['Q','A','A'], 'Fields': ['Q1','Pre','Post'],'ChildA' : [0,3,5],'ChildB' : [0,2,3]}) ChildA ChildB Fields Field_Type 0 0 0 Q1 Q 1 3 2 Pre A 2 5
df1 = pd.DataFrame({'Type' : ['Q','A','A'], 'Fields': ['Q1','Pre','Post'],'ChildA' : [0,3,5],'ChildB' : [0,2,3]})
ChildA ChildB Fields Field_Type
0 0 0 Q1 Q
1 3 2 Pre A
2 5 3 Post A
Name Question Pre Post
0 ChildA Q1 3 5
1 ChildB Q1 2 3
2 ChildA Q2 1 4
3 ChildB Q2 3 3
总共大约有200个左右的孩子和50个左右的问题。我想说的是这样的:
df1 = pd.DataFrame({'Type' : ['Q','A','A'], 'Fields': ['Q1','Pre','Post'],'ChildA' : [0,3,5],'ChildB' : [0,2,3]})
ChildA ChildB Fields Field_Type
0 0 0 Q1 Q
1 3 2 Pre A
2 5 3 Post A
Name Question Pre Post
0 ChildA Q1 3 5
1 ChildB Q1 2 3
2 ChildA Q2 1 4
3 ChildB Q2 3 3
但我不确定如何最好地解决这个问题,我尝试了stack
和pivot
,但两者都会返回ValueError:索引包含重复的条目,无法重塑
,或者当它工作时,它不是我需要的格式,或者可以使用正确的格式。到目前为止,我最接近的方法是使用转置df2=df1[0:3].T
,只要我一次取3行就行,但这似乎效率很低,我知道一定有更好的方法使用pivot或stack/unstack
也许这会涉及到一些多索引,所以我倾向于stack
,因为pivot
给出了各种各样的问题,比如异常:当我尝试说
df1.pivot(columns='Name',values=['Ben','Jack'])
非常感谢您的帮助 实际上,在一个数据帧中有两组数据。另外,答案没有他们要回答的问题
使用np.where
和fillna()
因为只有答案索引,所以转置是有意义的
stack()
输出
Fields Post Pre
Question
ChildA Q1 5 3
ChildB Q1 3 2