繁体   English   中英

如何使用 pandas 中的一个 lambda 语句将两个值分配给两列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM