在 Pandas 中简单添加不同大小的 DataFrame

Simple addition of different sizes DataFrames in Pandas

我有 2 个非常简单的加法问题 Pandas,希望你能帮助我。

我的第一个问题:

假设我有以下两个数据帧:a_dfb_df

a = [[1,1,1,1],[0,0,0,0],[1,1,0,0]]
a_df = pd.DataFrame(a)

a_df = 
   0  1  2  3
0  1  1  1  1
1  0  0  0  0
2  1  1  0  0


b = [1,1,1,1]
b_df = pd.DataFrame(b).T

b_df=
   0  1  2  3
0  1  1  1  1

我想将 b_df 添加到 a_df 以获得 c_df 这样我的预期输出如下:

c_df = 
   0  1  2  3
0  2  2  2  2
1  1  1  1  1
2  2  2  1  1

我目前使用的方法是将b_df复制到与a_df相同的大小并进行相加,如下图。但是,如果我的 a_df 非常非常大,则此方法效率不高。

a = [[1,1,1,1],[0,0,0,0],[1,1,0,0]]
a_df = pd.DataFrame(a)

b = [1,1,1,1]
b_df = pd.DataFrame(b).T
b_df = pd.concat([b_df]*len(a_df)).reset_index(drop=True)

c_df = a_df + b_df

是否有任何其他方法可以将 b_df(无需复制)添加到 a_df 以获得我想要的 c_df

我的第二个问题与我的第一个问题非常相似:

假设我有 d_dfe_df 如下:

d = [1,1,1,1]
d_df = pd.DataFrame(d)

d_df=
   0
0  1
1  1
2  1
3  1



e = [1]
e_df = pd.DataFrame(e)

e_df=
   0
0  1

我想将 e_df 添加到 d_df 这样我会得到以下结果:

   0
0  2
1  2
2  2
3  2

同样,当前我正在使用以下方法(与问题 1 相同)复制 e_df,然后再添加 d_df

d = [1,1,1,1]
d_df = pd.DataFrame(d)

e = [1]
e_df = pd.DataFrame(e)
e_df = pd.concat([e_df]*len(d_df)).reset_index(drop=True)

f_df = d_df + e_df

有没有不复制的方法e_df

请指教和帮助我。非常感谢你先进

汤米

首先将一行 DataFrame 转换为 Series:

c_df = a_df + b_df.iloc[0]
print (c_df)
   0  1  2  3
0  2  2  2  2
1  1  1  1  1
2  2  2  1  1

第二个原理相同:

c_df = d_df + e_df.iloc[0]
print (c_df)
   0
0  2
1  2
2  2
3  2

可以在 中找到更多信息。

试试这个:

    pd.DataFrame(a_df.to_numpy() + b_df.to_numpy())


    0   1   2   3
0   2   2   2   2
1   1   1   1   1
2   2   2   1   1

numpy 提供了广播功能,只要形状在一端相似,您就可以按照自己的方式添加。感觉之前有人回答过类似的问题。一旦我找到它,我会在这里引用它。
来自 numpy 的这篇文章很好地解释了广播