【问题标题】:Perform mathematical operation on a matching columns from 2 data frames: Python Pandas对来自 2 个数据帧的匹配列执行数学运算:Python Pandas
【发布时间】:2015-04-23 15:43:21
【问题描述】:

我有这两个具有不同行索引的数据框,但有些列是相同的。 我想要做的是获取一个数据框,它将具有相同列名的两个数据框的数量相加

df1 = pd.DataFrame([(1,2,3),(3,4,5),(5,6,7)], columns=['a','b','d'], index = ['A', 'B','C','D'])
df1
   a  b  d
A  1  2  3
B  3  4  5
C  5  6  7

df2 = pd.DataFrame([(10,20,30)], columns=['a','b','c'])

df2
    a   b   c
0  10  20  30

输出数据框:

    a   b  d
A  11  22  3
B  13  24  5
C  15  16  7

最好的方法是什么? .add() 似乎不适用于具有不同索引的数据帧。

【问题讨论】:

  • 这里的问题是对齐会发生在列和索引上。你关心如何到达最终的df吗?我的意思是这行得通:pd.DataFrame(data=(df1.values + df2.values), columns = df2.columns, index = df1.index)
  • 如果我没记错的话,df1a,b,d 列,df2a,b,c 列。而且,当您添加时,您只想添加a,b 常用列?

标签: python pandas frame


【解决方案1】:

这个单线就可以了:

In [30]: df1 + df2.ix[0].reindex(df1.columns).fillna(0)
Out[30]:
    a   b  d
A  11  22  3
B  13  24  5
C  15  26  7

【讨论】:

  • 啊。 reindex+1 单线
【解决方案2】:

这是一种方法。

df1df2 中提取要添加的常用列。

In [153]: col1 = df1.columns

In [154]: col2 = df2.columns

In [155]: cols = list(set(col1) & set(col2))

In [156]: cols
Out[156]: ['a', 'b']

现在添加值

In [157]: dff = df1

In [158]: dff[cols] = df1[cols].values+df2[cols].values

In [159]: dff
Out[159]:
    a   b  d
A  11  22  3
B  13  24  5
C  15  26  7

【讨论】:

    【解决方案3】:

    我认为这可能是最短的方法:

    In [36]:
    
    print df1 + df2.ix[0,df1.columns].fillna(0)
        a   b  d
    A  11  22  3
    B  13  24  5
    C  15  26  7
    

    第 1 步的结果是 series,如下所示: 在[44]中:

    df2.ix[0,df1.columns]
    Out[44]:
    a    10
    b    20
    d   NaN
    Name: 0, dtype: float64
    

    填写nan并将其添加到df1就足够了,因为索引将对齐:

    In [45]:
    
    df2.ix[0,df1.columns].fillna(0)
    Out[45]:
    a    10
    b    20
    d     0
    Name: 0, dtype: float64
    

    【讨论】:

    • 检查 OP 的 d column 输出。
    猜你喜欢
    • 2017-12-27
    • 1970-01-01
    • 2015-10-23
    • 2017-05-05
    • 2020-05-24
    • 2022-07-14
    • 2020-02-07
    • 2015-08-29
    • 2019-07-15
    相关资源
    最近更新 更多