[英]How to assign two values to two columns using one lambda sentence in pandas
我有一个 function 它返回两个值,例如:
def myfunc(x):
return a, b
我想将 a 和 b 分配给我的数据集中的两列,目前我使用如下代码:
df.loc[:,'col1'] = df['col0'].apply(lambda x: myfunc(x)[0])
df.loc[:,'col2'] = df['col0'].apply(lambda x: myfunc(x)[1])
当然它是低效的,因为它调用 myfunc 两次。 但是在这种情况下,我不知道如何使用一句话将值分配给两列。 任何人都可以提供一些帮助吗?
您应该将 function output 转换为系列:
def myfunc(x):
# dummy example
return x+1, x**2
df = pd.DataFrame({'col': [1,2,3,4]})
df[['col2', 'col3']] = df['col'].apply(lambda x: pd.Series(myfunc(x)))
注意。 这种操作很慢,最好想办法让你的 function 矢量化
output:
col col2 col3
0 1 2 1
1 2 3 4
2 3 4 9
3 4 5 16
或者,这可能会更有效,因为 dataframe 构造函数只调用一次(相对于上面每行一个系列):
df[['col2', 'col3']] = pd.DataFrame(zip(*df['col'].apply(myfunc))).T
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.