我已经设置了一个功能,我将其设置为返回两个值(称为Site& Date)。我尝试使用df.apply创建两个新列,每个列代表一个返回值。我不想两次或多次应用此函数,因为它需要很长时间,因此我需要某种方法将两列的值设置为函数中的两个或更多值。这是我的代码。
df1[['Site','Site Date']] = df1.apply(
lambda row: firstSite(biomass, row['lat'], row['long'], row['Date']),
axis = 1)
输入值生物量是坐标的数据框,行' lat' lng''日期'都是来自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之后[&#39;日期&#39;]。
2 - 如果坐标之间的距离大于2,则网站名称为&#39;更改为“无”&#39;
3 - 它从网站名称中删除任何重复项,确保只有一行的值为&#39; Null&#39;。
4 - 它返回&#39;站点名称&#39;的值&安培; &#39;纬度&#39;其中&#39;运营日期&#39;至少。
我需要我的代码返回生物量的第一个(按日期)记录,其中df1&amp;的坐标之间的距离。生物量小于2km。
希望我能够返回许多不同半径的第一条记录,例如2公里,4公里,6公里,8公里,10公里内的第一个生物量站点。
答案 0 :(得分:2)
我认为您的函数需要返回Series
并带有2个值:
df1 = pd.DataFrame({'A':list('abcdef'),
'lat':[4,5,4,5,5,4],
'long':[7,8,9,4,2,3],
'Date':pd.date_range('2011-01-01', periods=6),
'E':[5,3,6,9,2,4],
'F':list('aaabbb')})
print (df1)
A Date E F lat long
0 a 2011-01-01 5 a 4 7
1 b 2011-01-02 3 a 5 8
2 c 2011-01-03 6 a 4 9
3 d 2011-01-04 9 b 5 4
4 e 2011-01-05 2 b 5 2
5 f 2011-01-06 4 b 4 3
biomass = 10
def firstSite(a,b,c,d):
return pd.Series([a + b, d])
df1[['Site','Site Date']] = df1.apply(lambda row: firstSite(biomass,
row['lat'], row['long'], row['Date']),
axis = 1)
print (df1)
A Date E F lat long Site Site Date
0 a 2011-01-01 5 a 4 7 14 2011-01-01
1 b 2011-01-02 3 a 5 8 15 2011-01-02
2 c 2011-01-03 6 a 4 9 14 2011-01-03
3 d 2011-01-04 9 b 5 4 15 2011-01-04
4 e 2011-01-05 2 b 5 2 15 2011-01-05
5 f 2011-01-06 4 b 4 3 14 2011-01-06