我正在計算所有員工的通勤距離(家到辦公室)。這適用于具有以下代碼的單個辦公室:
#Calculate distances from home to all other offices
def distances_to_offices(row):
row['distance_to_office'] = round(distance.distance(row['Home_geocode'], row['Office_geocode']).km,0)
return row
df_joined.apply(distances_to_offices, axis=1)
雖然我有很多辦公室,但我想回圈遍歷它們,為每個辦公室創建一個新的距離列。該函式在沒有引數的情況下被呼叫,但“row”在函式定義中被設定為引數。當我嘗試傳遞城市名稱時,我需要使用與函式定義中相同數量的引數呼叫函式,但這不起作用,因為“行”不被理解為引數:
NameError: name 'row' is not defined
我不明白為什么“行”在函式定義中用作引數,但當我嘗試用該引數呼叫它時卻不行。誰能幫忙解釋一下?我正在考慮這樣的事情,但很難選擇正確的論點:
# throws Name Error:
def distances_to_offices(row, city):
col_name = city "_distance"
row[col_name] = round(distance.distance(row['Home_geocode'], row['Office_geocode']).km,0)
return row
offices = ['NY', 'Rio', 'Tokyo']
for city in offices:
df_joined.apply(distances_to_offices(row, city), axis=1)
uj5u.com熱心網友回復:
不能肯定地說,因為我不知道 df_joined 是什么,但它看起來像是一個代表資料表的物件,您可以在其上呼叫apply()
傳遞函式,apply()
并將回圈遍歷表,呼叫您擁有的函式在為資料表的每一行傳遞行索引或名稱時提供。
第一種方法是有效的,因為您將函式的名稱傳遞給 apply(),而 apply() 使用在它設定的某個 for 回圈中定義的distances_to_offices
a 呼叫它。row
第二種方法失敗了,因為您不再傳遞 NAME distances_to_offices
,而是使用引數row
和CALLING 它city
,然后將該函式呼叫的結果作為引數傳遞給apply()
. 這是行不通的,因為您還沒有定義什么row
是,但是 Python 需要知道什么row
是為了執行函式呼叫distances_to_offices(row, city)
,這發生在 apply 看到它并有機會定義之前row
。
我不確定 df_joined.apply() 是如何作業的,所以如果沒有更多資訊,我無法說出正確的方法。一種策略是在回圈的每次迭代中創建一個新的資料表物件,方法是過濾 df_joined 以僅保留與城市匹配的行city
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/470672.html