2017-05-16 55 views
0

我需要關於python熊貓的一些指導,因爲它是前端開發的未知領域。我現在對數據框架概念很熟悉。我正在尋找通過比較兩個其他數據框來創建新數據框的方法。爲此,我應該在熊貓中尋找什麼?檢查兩個數據幀的差異並創建一個新的數據框

例如,考慮DF1作爲

Date   col1  col2  col3  id 
2017-04-14  2482  1  0  a2 
2017-04-15  2483  1  0  a3 

和DF2作爲

Date   col1  col2  col3  id 
2017-04-15  2483  10  20  a3 
2017-04-14  2482  11  0  a2 

所以我想實現的是創建與不同的像

值的詳細信息的新數據幀
Date   df1_value df2_valuue diff_col_name val_diff  id 
2017-04-14  1   11   col2    -10   a2 
2017-04-15  1   11   col2    -9   a3 
2017-04-15  0   20   col3    20   a3 

所以我能夠加入兩個基於id的dfs,df1.merge(df2, on='id', how='left'),但是, d是下一步行動。我如何比較差異並創建最終的DF?

+1

[並排兩熊貓dataframes側1.4.3差 - 突出的差]的可能的複製(http://stackoverflow.com/問題/ 17095101 /輸出差式 - 雙大熊貓-dataframes側由端突出顯示最d) – philshem

回答

0

設置

df1 = pd.DataFrame({'Date': {0: '2017-04-14', 1: '2017-04-15'}, 
'col1': {0: 2482, 1: 2483}, 
'col2': {0: 1, 1: 1}, 
'col3': {0: 0, 1: 0}, 
'id': {0: 'a2', 1: 'a3'}}) 

df2 = pd.DataFrame({'Date': {0: '2017-04-15', 1: '2017-04-14'}, 
'col1': {0: 2483, 1: 2482}, 
'col2': {0: 10, 1: 11}, 
'col3': {0: 20, 1: 0}, 
'id': {0: 'a3', 1: 'a2'}}) 

#melt the dfs to long df from wide df and merge them together. 
dfm = pd.merge(pd.melt(df1,id_vars=['Date','id']), 
       pd.melt(df2,id_vars=['Date','id']), 
       how='outer',on=['Date','id','variable']) 

#rename columns 
dfm.columns=['Date','id','diff_col_name','df1_value','df2_value'] 
#compare values 
dfm['val_diff'] = dfm.df1_value-dfm.df2_value 
#reorder columns 
dfm = dfm[['Date','df1_value','df2_value','diff_col_name','val_diff','id']] 
#filter unequal values 
dfm=dfm[dfm.val_diff!=0] 

Out[2001]: 
     Date df1_value df2_value diff_col_name val_diff id 
2 2017-04-14   1   11   col2  -10 a2 
3 2017-04-15   1   10   col2  -9 a3 
5 2017-04-15   0   20   col3  -20 a3 
相關問題