2016-11-11 77 views
3

我正在處理Mint事務數據並嘗試將每個類別的值彙總到其父類別中。從DataFrame到父索引的總和值 - Python/Pandas

我是從我所有的薄荷交易創建了一個數據幀mint_data:

mint_data = tranactions_data.pivot(index='Category', columns='Date', values='Amount') 

mint_data image

而且隨着等級的字典:家長對(這使用xlwings從excel表格拉)

cat_parent = cats_sheet.range('A1').expand().options(dict).value 

Cat:Parent image

我不知道如何去循環通過mint_data df並將總和添加到父類別中。我想保持數據幀格式完全一樣,只需要替換父值。

下面是一個例子DF:

 A B C D E 
par_a 0 0 5 0 0 
cat1a 5 2 3 2 1 
cat2a 0 1 2 1 0 
par_b 1 0 1 1 2 
cat1b 0 1 2 1 0 
cat2b 1 1 1 1 1 
cat3b 0 1 2 1 0 

我也有

{'par_a': 'par_a', 
'cat1a': 'par_a', 
'cat2a': 'par_a', 
'par_b': 'par_b', 
'cat1b': 'par_b', 
'cat2b': 'par_b', 
'cat3b': 'par_b'} 

我試圖讓數據框與

 A B C D E 
par_a 5 3 10 3 1 
cat1a 5 2 3 2 1 
cat2a 0 1 2 1 0 
par_b 2 3 6 4 3 
cat1b 0 1 2 1 0 
cat2b 1 1 1 1 1 
cat3b 0 1 2 1 0 
+0

我想我需要了解更多關於MultiIndexing – ktorquem

回答

1

我們叫落得一個字典你的字典「dct」,然後製作一個映射到父代的新列:

>>> df['parent'] = df.reset_index()['index'].map(dct).values 

     A B C D E parent 
par_a 0 0 5 0 0 par_a 
cat1a 5 2 3 2 1 par_a 
cat2a 0 1 2 1 0 par_a 
par_b 1 0 1 1 2 par_b 
cat1b 0 1 2 1 0 par_b 
cat2b 1 1 1 1 1 par_b 
cat3b 0 1 2 1 0 par_b 

然後由家長總結:

>>> df_sum = df.groupby('parent').sum() 

     A B C D E 
parent     
par_a 5 3 10 3 1 
par_b 2 3 6 4 3 

在很多情況下,你會停在那裏,但因爲你要的父/子數據結合起來,你需要某種形式的合併。 combine_first將很好地工作在這裏,因爲它會選擇性地指引更新你想要的:

>>> df_new = df_sum.combine_first(df) 

     A B  C D E parent 
cat1a 5.0 2.0 3.0 2.0 1.0 par_a 
cat1b 0.0 1.0 2.0 1.0 0.0 par_b 
cat2a 0.0 1.0 2.0 1.0 0.0 par_a 
cat2b 1.0 1.0 1.0 1.0 1.0 par_b 
cat3b 0.0 1.0 2.0 1.0 0.0 par_b 
par_a 5.0 3.0 10.0 3.0 1.0 par_a 
par_b 2.0 3.0 6.0 4.0 3.0 par_b 

你提到的評論的多指標,所以你可能更喜歡更喜歡這個組織它:

>>> df_new.reset_index().set_index(['parent','index']).sort_index() 

       A B  C D E 
parent index       
par_a cat1a 5.0 2.0 3.0 2.0 1.0 
     cat2a 0.0 1.0 2.0 1.0 0.0 
     par_a 5.0 3.0 10.0 3.0 1.0 
par_b cat1b 0.0 1.0 2.0 1.0 0.0 
     cat2b 1.0 1.0 1.0 1.0 1.0 
     cat3b 0.0 1.0 2.0 1.0 0.0 
     par_b 2.0 3.0 6.0 4.0 3.0 
+0

今天會測試一下並報告回來,但看起來正是我所需要的。謝謝 – ktorquem