2016-09-25 12 views
1

私はpythonのデータフレームで、データフレーム内の場所とLATITUDELONGITUDE列の距離を計算しています。私は以下のコードを実行すると、エラーがない:Pythonのデータフレームの列の関数の計算結果

lLat= 43.679194 
lLon= -79.633352 
LCentroid= (lLat, lLon) 
# getDistanceBetween gets two centroids and calculate the distance 
dfTowers['distance']= HL.getDistanceBetween(LCentroid, dfTowers.index.get_level_values('LATITUDE')[0],  dfTowers.index.get_level_values('LONGITUDE')[0])) 

が、私は以下のいずれかを使用する場合、エラー

lLat= 43.679194 
lLon= -79.633352 
LCentroid= (lLat, lLon) 

dfTowers['distance']= HL.getDistanceBetween(LCentroid, dfTowers.index.get_level_values('LATITUDE'), dfTowers.index.get_level_values('LONGITUDE'))) 

があり、エラーがある:

TypeError         Traceback (most recent call last) 
<ipython-input-43-065640ee0e20> in <module>() 
    5 
    6 dfTowers['distance']= HL.getDistanceBetween(LCentroid,  (dfTowers.index.get_level_values('LATITUDE'), 
----> 7           dfTowers.index.get_level_values('LONGITUDE'))) 

C:\Users\x190523\Documents\python exercice\HomeLocation.pyc in getDistanceBetween(c1, c2) 

TypeError: a float is required 

答えて

1

get_level_valuesはラベルの「ベクトル」を返します。最初の例では、ベクトルにアクセスして適切に値を取得します。あなたの2番目の例では、ベクトル全体を渡して、getDistanceBetweenはそれをどうするか分かりません。

編集:今 すべての行のためにそれを計算するため、私たちはどのように私はこの問題を解決することができますので、

# add the new column, initialized to NaN 
dfTowers['distance'] = np.nan 
for row_name, row in dfTowers.iterrows(): 
    row['distance'] = HL.getDistanceBetween(LCentroid, row['LATITUDE'], row['LONGITUDE']) 
+0

上記の構文frのいずれかを必要としません。注意: 'dfTowers'は' group by'を使って生成されます。 – user3854325

+0

最初の例でコードを使用すれば、すべてがうまくいくと思いました。あなたは、最初の例が働いたことを確認することができました。あなたが働いていることをもっと私たちに見せてくれますか?最初の例では – nbui

+0

であり、 'distance'カラムの値は最初の行の' latitude'と 'longitude'を使って計算されます。しかし、私は、対応する行の「緯度」と「経度」の値に基づいて各行の「距離」を計算したいと思います。単純なデータフレームと同様にグループを使用して作成したデータフレームの結果にアクセスできるかどうかは、問題が解決されると思います。しかし、私は方法がわかりません。 – user3854325

関連する問題