我有一个较小的数据框,而行和列却少于较大的数据框。 如何添加较大数据框中的行和列,并用零填充?基本上我想在下图中以红色添加单元格:
下面是一个玩具示例。我曾尝试使用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)
答案 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)
将mul
与notnull
一起使用
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