假设我有一个函数:
def fn(x)
y = x ** 2
z = x ** 3
return y, z
我希望使用df['x'].apply(lambda x: fn(x))
返回分别存储在不同列中的y
和z
。 有没有一种好的方法通过仍然使用fn(x)
来实现这一点? 实际上,我的函数会更加复杂 - 所以我只想在应用程序内运行一次,并将output[0]
,output[1]
等分配给单独的列。
假设我有一个函数:
def fn(x)
y = x ** 2
z = x ** 3
return y, z
我希望使用df['x'].apply(lambda x: fn(x))
返回分别存储在不同列中的y
和z
。 有没有一种好的方法通过仍然使用fn(x)
来实现这一点? 实际上,我的函数会更加复杂 - 所以我只想在应用程序内运行一次,并将output[0]
,output[1]
等分配给单独的列。
data = {'state':['Ohio','Ohio','Ohio','Nevada','Nevada'], 'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]}
frame = pd.DataFrame(data, columns = ['year','state','pop'])
def fn(x,head1,head2):
y = x ** 2
z = x ** 3
return pd.Series({head1:y, head2:z})
frame = frame.merge(frame['pop'].apply(lambda s: fn(s,'xsqr','xcube')), left_index=True, right_index=True)
结果:
year state pop xcube xsqr
0 2000 Ohio 1.5 3.375 2.25
1 2001 Ohio 1.7 4.913 2.89
2 2002 Ohio 3.6 46.656 12.96
3 2001 Nevada 2.4 13.824 5.76
4 2002 Nevada 2.9 24.389 8.41
df["y"], df["z"] = zip(*df["x"].apply(fn))
。 - DSM