Python 检查两个数据帧中的差异并创建新的数据帧
我需要一些关于python pandas的指导,因为它对于前端开发人员来说是一个未知领域。我现在熟悉dataframes的概念。我正在寻找通过比较其他两个数据帧来创建新数据帧的方法。为此,我应该在熊猫身上寻找什么Python 检查两个数据帧中的差异并创建新的数据帧,python,pandas,Python,Pandas,我需要一些关于python pandas的指导,因为它对于前端开发人员来说是一个未知领域。我现在熟悉dataframes的概念。我正在寻找通过比较其他两个数据帧来创建新数据帧的方法。为此,我应该在熊猫身上寻找什么 例如,考虑DF1为 Date col1 col2 col3 id 2017-04-14 2482 1 0 a2 2017-04-15 2483 1 0
例如,考虑DF1为
Date col1 col2 col3 id
2017-04-14 2482 1 0 a2
2017-04-15 2483 1 0 a3
和df2 as
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')
,但下一步该怎么做呢。如何比较差异并创建最终df?设置
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
可能重复的