gpt4 book ai didi

python - 将 Pandas 函数应用于多个列

转载 作者:太空宇宙 更新时间:2023-11-04 02:46:16 25 4
gpt4 key购买 nike

我有一个函数,我已将其设置为返回两个值(称它们为 Site & Date)。我正在尝试使用 df.apply 创建两个新列,每个列代表一个返回值。我不想将此函数应用两次或更多次,因为它会花费很长时间,因此我需要某种方法将两列的值设置为函数中的两个或更多值。这是我的代码。

df1[['Site','Site Date']] = df1.apply(
lambda row: firstSite(biomass, row['lat'], row['long'], row['Date']),
axis = 1)

输入值 biomass 是一个坐标数据框,行 '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['Date'] 之后的所有行。

2 - 如果坐标之间的距离大于 2,则“站点名称”更改为“空”

3 - 它删除站点名称中的所有重复项,确保只有一行的值为“Null”。

4 - 它返回“站点名称”和“Lat”的值,其中“操作日期”最少。

我需要我的代码返回来自生物量的第一个(按日期)记录,其中 df1 和生物量的坐标之间的距离小于 2 公里。

希望我能够返回许多不同半径的第一个记录,例如 2 公里、4 公里、6 公里、8 公里、10 公里内的第一个生物质站点。

最佳答案

我认为您的函数需要返回具有 2 个值的 Series:

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

关于python - 将 Pandas 函数应用于多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45057194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com