2017-07-10 3 views
1

私はフォームのピボットデータフレームを持っています。ピボットデータフレームのパンダcumsum

 Quantity    Result    
Alpha  A B C  A  B  C 
Order           
1   3.0 0.0 0.0  Best None None 
2   0.0 6.0 4.0  None Good Good 
3   3.0 0.0 0.0 Average None None 

と私は、主要なコラム数量で対応する3列のCUMSUM()になりたい3列にCumulativeQtyと呼ばれる別の主要な列を作成しようとしています。マイナー列を個別に指定することなく、どうやってそれをどうやって行くのですか?私は

p['CumulativeQty'] = p['Quantity'].cumsum(axis=1) 

を試してみましたが、これはValueErrorをと文句を言います:アイテムの間違った数が3に合格し、配置が1

所望の結果は

以下
  CumulativeQty      
Alpha  A B C  
Order           
1   3.0 0.0 0.0  
2   3.0 6.0 4.0  
3   6.0 6.0 4.0 

である意味が開始に旋回データフレームを取得する方法です。

df = pd.DataFrame(data=[[1, "A", 3, "Best"], [2, "C", 4, "Good"], [2, "B", 6, "Good"], [3, "A", 3, "Average"]], 
        columns=["Order", "Alpha", "Quantity", "Result"]) 
p = df.pivot(index="Order", columns="Alpha") 
p['Quantity'] = p['Quantity'].fillna(0) 

答えて

2

オプション1

p.join(p[['Quantity']].cumsum().rename(columns=dict(Quantity='Cumsum'))) 

     Quantity    Result    Cumsum   
Alpha  A B C  A  B  C  A B C 
Order               
1   3.0 0.0 0.0  Best None None 3.0 0.0 0.0 
2   0.0 6.0 4.0  None Good Good 3.0 6.0 4.0 
3   3.0 0.0 0.0 Average None None 6.0 6.0 4.0 

オプション2

pd.concat([ 
     p.Quantity, p.Result, p.Quantity.cumsum() 
    ], axis=1, keys=['Quantity', 'Result', 'Cumsum']) 

     Quantity    Result    Cumsum   
Alpha  A B C  A  B  C  A B C 
Order               
1   3.0 0.0 0.0  Best None None 3.0 0.0 0.0 
2   0.0 6.0 4.0  None Good Good 3.0 6.0 4.0 
3   3.0 0.0 0.0 Average None None 6.0 6.0 4.0 
1

はそれを行うための1つの方法は次のとおりです。

for i in sorted(df.Alpha): 
    p['CumulativeQty',i] = p['Quantity',i].cumsum(axis=0) 

axis=1axis=0に変更したのは、水平方向に合計していて、目的の出力が得られなかったためです。

出力:

 Quantity    Result    CumulativeQty   
Alpha  A B C  A  B  C    A B C 
Order                 
1   3.0 0.0 0.0  Best None None   3.0 0.0 0.0 
2   0.0 6.0 4.0  None Good Good   3.0 6.0 4.0 
3   3.0 0.0 0.0 Average None None   6.0 6.0 4.0 

あなたの問題はあなたが1列内のすべてのA B and C結果に合うようにしようとしていたということは基本的でした。基本的には "MultiIndex"の問題です。

関連する問題