2014-04-06 17 views
1

我有透视表创建加入2个数据帧,重叠的数据

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 

df=pd.DataFrame({'axis1': ['Unix','Window','Apple','Linux'], 
       'A': [1,np.nan,1,1], 
       'B': [1,np.nan,np.nan,1], 
       'C': [np.nan,1,np.nan,1], 
       'D': [1,np.nan,1,np.nan], 
       }).set_index(['axis1']) 

print (df) 

df2=pd.DataFrame({'axis1': ['Unix','Window','Apple','Linux','A'], 
       'A': [1,1,np.nan,np.nan,np.nan], 
       'E': [1,np.nan,1,1,1], 
       }).set_index(['axis1']) 
print (df2) 

输出2数据帧看起来像这样

  A B C D 
axis1     
Unix  1 1 NaN 1 
Window NaN NaN 1 NaN 
Apple 1 NaN NaN 1 
Linux 1 1 1 NaN 

[4 rows x 4 columns] 
     A E 
axis1   
Unix  1 1 
Window 1 NaN 
Apple NaN 1 
Linux NaN 1 
A  NaN 1 

可以说,我想将它们合并,但我只是想要值1 到目前为止,我得到了它,但它不具有E列或行答:

>>> df.update(df2) 
>>> df 
     A B C D 
axis1     
Unix 1 1 NaN 1 
Window 1 NaN 1 NaN 
Apple 1 NaN NaN 1 
Linux 1 1 1 NaN 

[4 rows x 4 columns] 

会如何我更新它来获得额外的轴值? (包括A行和列E)

回答

0

你想你打电话之前,reindex你的第一个数据帧更新

一个可靠的方法是计算两个DF的列和行的结合,也许有一个更聪明方式,但我现在想不出

df = df.reindex(columns=df2.columns.union(df.columns), 
       index=df2.index.union(df.index)) 

然后你打电话更新,它应该工作。