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