2017-09-22 45 views
0

我有2個數據幀,一個用於導出,一個用於導入。我使用pd.concat()在單個數據幀中連接了導出和導入數字。組中的值之差由

table3 = pd.concat([table1,table2],keys=['table1','table2']) 

輸出是:

SRI LANKA DSR 
        count sumavlue 
table1 194 SRI LANKA DSR 139571409 
table2 185 SRI LANKA DSR 1803152 


ST HELENA 
       count sumavlue 
table1 195 ST HELENA  24 
table2 186 ST HELENA   0 


ST KITT N A 
        count sumavlue 
table1 196 ST KITT N A   0 
table2 187 ST KITT N A   0 

現在我需要計算每個國家的第一排和第二排之間的差異,並得到新的一列(重命名版本)。我怎樣才能得到這個?

我需要爲每個國家(出口導入)作爲差異(新列名稱)。

  • 對於斯里蘭卡這將是139571409-1803152 = XXXXXX
  • 對於ST海倫娜這將是24-0 = 24
  • 等其他國家

在上面的例子

+0

@ayhan你能幫忙嗎? – user46562

+0

提供Table1,Table2的精確測試用例,如果您想要完全可重現的代碼。 – chrisckwong821

+0

你能再看一次問題嗎?我編輯過它 – user46562

回答

0

您可以嘗試使用groupby,unstack和stack的組合。我不確定你的專欄名稱是什麼,所以我假設了一些自由。這是我的工作:

# Make DataFrame 
df = pd.DataFrame({'country' : ['Sri Lanka DSR']*2 + ['St Helena']*2 + ['St Kitt']*2, 
        'table' : ['table1', 'table2']*3, 
        'ID' : [194, 185, 195, 186, 196, 187], 
        'sumvalue' : [139571409, 1803152, 24, 0, 0, 0]}) 

# Groupby 'country', 'table', 'ID'; 
# unstack 'table', 'ID' and take reverse difference on the columns; 
# stack 'table', 'ID' and rename 'sumvalue' to 'diff' 
df.groupby(['country', 
      'table', 
      'ID']).agg({'sumvalue' : 'sum'}).unstack(['table', 
                 'ID']).\ 
      diff(periods = -1, 
       axis = 1).stack(['table', 
            'ID']).rename(columns = {'sumvalue' : 'diff'}) 

diff