使用重叠数据连接2个数据帧

时间:2014-04-06 08:13:06

标签: python join pandas

我有两个数据框由数据透视表创建

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)

输出看起来像这样

         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列或A行:

>>> 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列)

1 个答案:

答案 0 :(得分:0)

在调用update

之前,您希望reindex第一个Dataframe

一种强有力的方法是计算两个df的列和行的并集,也许有更聪明的方法,但我现在无法想到

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

然后你调用更新,它应该工作。