【问题标题】:Simple addition of different sizes DataFrames in Pandas在 Pandas 中简单添加不同大小的 DataFrame
【发布时间】:2020-03-16 07:50:38
【问题描述】:

我有两个非常简单的 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?

请给我建议和帮助。非常感谢您在高级

汤米

【问题讨论】:

    标签: pandas dataframe addition


    【解决方案1】:

    试试这个:

        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】:

      首先将一行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
      

      更多信息可以在How do I operate on a DataFrame with a Series for every column找到。

      【讨论】:

        猜你喜欢
        • 2012-11-15
        • 1970-01-01
        • 1970-01-01
        • 2017-05-17
        • 2017-06-19
        • 2019-03-23
        • 1970-01-01
        • 1970-01-01
        • 2014-05-25
        相关资源
        最近更新 更多