在 Pandas 中简单添加不同大小的 DataFrame
Simple addition of different sizes DataFrames in Pandas
我有 2 个非常简单的加法问题 Pandas,希望你能帮助我。
我的第一个问题:
假设我有以下两个数据帧:a_df
和 b_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_df
和 e_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 的这篇文章很好地解释了广播
我有 2 个非常简单的加法问题 Pandas,希望你能帮助我。
我的第一个问题:
假设我有以下两个数据帧:a_df
和 b_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_df
和 e_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 的这篇文章很好地解释了广播