簡體   English   中英

如何比較兩個數據幀,並添加兩個中沒有一個沒有的行和列

[英]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

使用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 

遲到的答案,但你也可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM