我已經設置了一個函數來返回兩個值(稱爲Site & Date)。我試圖使用df.apply創建兩個新列,每個列表示返回的值之一。我不想將這個函數應用兩次或更多次,因爲它會花費很長時間,所以我需要一些方法將兩列的值設置爲函數中的兩個或更多值。這是我的代碼。將熊貓函數應用於多列
df1[['Site','Site Date']] = df1.apply(
lambda row: firstSite(biomass, row['lat'], row['long'], row['Date']),
axis = 1)
輸入值生物量是座標的數據幀,row'lat','lng','Date'是來自df1的所有列。如果我決定將這個函數應用於df ['Site'],它可以很好地工作,但是當我想將值應用於兩列時,我得到這個錯誤。
ValueError: Shape of passed values is (999, 2), indices imply (999, 28)
def firstSite(biomass, lat, long, date):
biomass['Date of Operation'] = pd.to_datetime(biomass['Date of Operation'])
biomass = biomass[biomass['Date of Operation'] <= date]
biomass['distance'] = biomass.apply(
lambda row: distanceBetweenCm(lat, long, row['Lat'], row['Lng']),
axis=1)
biomass['Site Name'] = np.where((biomass['distance'] <= 2), biomass['Site Name'], "Null")
biomass = biomass.drop_duplicates('Site Name')
Site = biomass.loc[biomass['Date of Operation'].idxmin(),'Site Name']
Lat = biomass.loc[biomass['Date of Operation'].idxmin(),'Lat']
return Site, Lat
此功能有幾個任務:
1 - 它從生物質其中的日期爲DF1 [ '日期']後刪除任何行。
2 - 如果座標之間的距離超過2個,「網站名稱」更改爲「空」
3 - 它消除了從網站名稱的重複,確保只會有一排值爲'Null'。
4 - 它返回「站點名稱」的值&'拉特'其中'操作日期'最少。
我需要我的代碼返回來自生物量的第一個(按日期)記錄,其中生物量的座標之間的距離小於2公里。
希望我能夠返回許多不同半徑的第一條記錄,如2km,4km,6km,8km,10km內的第一個生物量站點。
什麼是'打印(df2.info())''如果DF2 = df1.apply( 拉姆達行:firstSite(生物量,行['lat'],行['long'],行['Date']), axis = 1)'? – jezrael
AttributeError:'Series'對象沒有屬性'info' – christaylor
好吧,所以輸出是'Series',那麼爲什麼要把輸出添加到2列呢? '當輸出是系列(df中的列)時''df1 [['Site','Site Date']]'? – jezrael