2017-02-22 25 views
-1

Ребята Я только начал использовать python и выпустил с использованием фрейма данных pandas.Добавить вычисляемый столбец в dataframe

enter image description here

У меня есть dataframe в вышеуказанном формате. У меня есть функция для вычисления расстояния между местоположениями.

def Dist(lat1, lon1, lat2, lon2): 
dlat = lat2 - lat1 
dlon = lon2 - lon1 
return dlat + dlon 

Я хочу, чтобы создать новый столбец на dataframe для каждого расстояния от LAT1/lon1 до широты/долготы и LAT2/lon2 до широты/долготы. Я пробовал использовать следующий код, но получаю ошибку.

df['dist1'] = Dist(df['lat'], df['lon'], df['lat1'], df['lon1']) 
df['dist2'] = Dist(df['lat'], df['lon'], df['lat2'], df['lon2']) 

TypeError: cannot convert the series to <class 'float'> 

Что мне здесь не хватает? Каким образом можно было бы вызвать функцию для каждой строки и добавить ее как значение для каждой ячейки в новом столбце?

Буду признателен за любую помощь.

+1

Первая помощь Я предложу предложить вам прочитать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). Это помогает вам вынести свой вопрос таким образом, чтобы люди, которые отвечали на вопросы, охотно отвечали на них. – piRSquared

+1

@piRSquared согласован. И в этом случае важно, чтобы вы действительно использовали свою функцию, а не «возвращать что-то» –

+0

@piRSquared спасибо за предложение. Функция здесь не так важна, вы можете просто вернуть 0, и вы все равно получите эту проблему. Однако вместо того, чтобы возвращать «что-то», я возвращаю некоторую реальную ценность сейчас. Моя проблема - когда я вызываю метод, вся серия передается функции. Прошу прощения, если мой вопрос не является полным или понятным. – Bikswan

ответ

0

Я понял путь. Не может быть эффективным.

for index, row in df.iterrows(): 
    df.loc[index, 'dist_1'] = Dist(row['lat'], row['lon'], row['lat1'], row['lon1']) 
    df.loc[index, 'dist_2'] = Dist(row['lat'], row['lon'], row['lat2'], row['lon2']) 
Смежные вопросы