2016-08-05 4 views
2

を引き:私のデータフレームは、このようになりますデータフレームの各行にベクトル

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 

です。私は各行のベクトルで満たされたデータフレームを作成することができました。このベクトルを減算するより効率的な方法はありますか?私はループを使いたくない。

+1

小文字:dfsを正しく整列させるために(軸パラメータ付きの)サブメソッドを使用すると仮定しますが、解答で説明したように、そのためのシリーズが必要です。シリーズを作ったら、 'fruits-sold.squeeze()'や 'fruits-sold.iloc [0、:]'を使うこともできます。 – ayhan

答えて

2

てみてください:あなたはsoldので動作しませんでした前に試してみました何

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

enter image description here

は、データフレームであると減算はcolumnsindexの両方を揃えるしようとします。 sold.iloc[0, :]は最初の行になり、シリーズとなり、意図したとおりに動作します。

3

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間設計演算によってよう必要である、これはあなたが引くことを可能にするシリーズを通過させることにより、インデックスと列に整列しますdfの各行から他のdfの行を削除します。

関連する問題