2017-05-16 12 views
0

フロントエンドの開発者にとっては未知の領域なので、私はPythonのパンダに関するガイダンスが必要です。私は今、データフレームのコンセプトに精通しています。私は、他の2つのデータフレームを比較して新しいデータフレームを作成する方法を探していました。この目的のために、私はパンダで何を探していますか?例については2つのデータフレームの違いをチェックし、新しいデータフレームを作成する

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

として

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

とDF2としてDF1考えるので、私は何を達成しようとしていること

のような異なる値の詳細を持つ新しいデータフレームを作成しています
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に基づいて2つのdfsに参加することができました。df1.merge(df2, on='id', how='left')ですが、どのようなshoul dは次の動きです。どのように違いを比較し、最終的なdfを作成するのですか?

+1

[2つのパンダのデータフレームに出力する差並べ - 差異を強調]の可能な重複(http://stackoverflow.com/質問/ 17095101 /出力差 - 2パンダ - データフレーム - サイドバイサイド - 強調表示-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 
関連する問題