将向量减去数据帧的每一行

时间:2016-08-05 19:28:36

标签: python-2.7 pandas dataframe

我的数据框如下所示:

fruits = pd.DataFrame({'orange': [10, 20], 'apple': [30, 40], 'banana': [50, 60]})


   apple  banana  orange
0     30      50      10
1     40      60      20

我有这个载体(它也是一个数据帧)

sold = pd.DataFrame({'orange': [1], 'apple': [2], 'banana': [3]})

   apple  banana  orange
0      2       3       1

我想将此向量减去初始数据帧的每一行,以获得看起来像这样的数据框

   apple  banana  orange
0   28.0    47.0     9.0
1   38.0    57.0     19.0

我试过了:

print fruits.subtract(sold, axis = 0)

输出

   apple  banana  orange
0   28.0    47.0     9.0
1    NaN     NaN     NaN

它仅适用于第一行。我可以创建一个填充每行向量的数据框。有没有更有效的方法来减去这个向量?我不想使用循环。

2 个答案:

答案 0 :(得分:4)

使用squeeze将df转换为系列并传递axis=1

In [6]:
fruits.sub(sold.squeeze(), axis=1)

Out[6]:
   apple  banana  orange
0     28      47       9
1     38      57      19

转换是必要的,因为dfs之间的设计算术运算将在索引和列上对齐,通过传递一个Series,这允许您从df中的每一行中减去另一个df中的行。

答案 1 :(得分:2)

尝试:

fruits.sub(sold.iloc[0, :])

enter image description here

您之前尝试的内容无效,因为sold是一个数据框,减法会尝试对齐columnsindexsold.iloc[0, :]位于第一行,因此系列将按预期工作。