[英]How to compare two dataframes, and add the rows and columns which one of the two doesn`t have
我有一個小數據幀,行數和列數比較大的數據幀少。 如何添加更大數據幀中的行和列,並用零填充它們? 基本上我想在下圖中添加紅色單元格:
下面是一個玩具示例。 我嘗試過使用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)
這看起來像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
您還可以在DataFrame.reindex_like
上使用df_small
:
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
使用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
遲到的答案,但你也可以使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.