2017-05-16 52 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 
相关问题