如何比较两个数据框,并添加两个数据框之一没有的行和列

时间:2019-04-02 22:21:58

标签: python pandas join merge

我有一个较小的数据框,而行和列却少于较大的数据框。 如何添加较大数据框中的行和列,并用零填充?基本上我想在下图中以红色添加单元格:

enter image description here

下面是一个玩具示例。我曾尝试使用pandas.concat,但最终得到了较大数据框中的所有值。

import numpy as np
import pandas as pd
df_big = pd.DataFrame(index=["a","b","c","d"])
df_big["x"] = np.arange(4)
df_big["y"] = df_big.x * 2
df_big["z"] = df_big.x * 3

df_small=pd.DataFrame(index=["a","b"])
df_small["x"]=[8,10]
df_small["y"]=[30,40]

out = pd.concat( [df_big, df_small] , axis=0)

3 个答案:

答案 0 :(得分:3)

这似乎是DataFrame.align的好用例:

_, out = df_big.align(df_small, fill_value=0)
out

    x   y  z
a   8  30  0
b  10  40  0
c   0   0  0
d   0   0  0

您还可以在df_small上使用DataFrame.reindex_like

df_small.reindex_like(df_big).fillna(0, downcast='infer')

    x   y  z
a   8  30  0
b  10  40  0
c   0   0  0
d   0   0  0

答案 1 :(得分:2)

mulnotnull一起使用

df_small.mul(df_big.notnull(),fill_value=0).astype(int)
Out[275]: 
    x   y  z
a   8  30  0
b  10  40  0
c   0   0  0
d   0   0  0
#df_small.mul(df_big.astype(bool),fill_value=0).astype(int) # change to astype will achieve the same 

答案 2 :(得分:0)

最新答案,但您也可以使用pandas.DataFrame.update,即:

df_big[:] = 0
df_big.update(df_small, join='left', overwrite=True)

      x     y  z
a   8.0  30.0  0
b  10.0  40.0  0
c   0.0   0.0  0
d   0.0   0.0  0