代码之家  ›  专栏  ›  技术社区  ›  Nihal Saranga

pandas lambda返回多个参数

  •  1
  • Nihal Saranga  · 技术社区  · 7 年前
    import pandas as pd
    import numpy as np
    
    def ced(x):
        return x+1, x+2, x+3
    
    
    df = pd.DataFrame(data=[[1,2],[10,20]], columns=['a','b'])
    
    
    df['x'], df['y'], df['z'] = df['a'].apply(lambda x: ced(x)) 
    
    
    print(df)
    

    错误:

    第11行,in df['x'],df['y'],df['z']=df['a'].应用(lambda x:ced(x))值错误:没有足够的值来解包(应为3,得到2)

    这东西对

    import pandas as pd
    import numpy as np
    
    def ced(x):
        return x+1, x+2
    
    
    df = pd.DataFrame(data=[[1,2],[10,20]], columns=['a','b'])
    
    
    df['x'], df['y'] = df['a'].apply(lambda x: ced(x)) 
    
    
    print(df)
    

    输出:

        a   b  x   y
    0   1   2  2  11
    1  10  20  3  12
    

    我不知道这里有什么问题。

    1 回复  |  直到 7 年前
        1
  •  1
  •   jezrael    7 年前

    我建议退换货 Series 以及新列的子集:

    def ced(x):
        return pd.Series([x+1, x+2, x+2])
    
    df = pd.DataFrame(data=[[1,2],[10,20]], columns=['a','b'])
    
    
    df[['x','y', 'z']] = df['a'].apply(lambda x: ced(x)) 
    
    print(df)
        a   b   x   y   z
    0   1   2   2   3   3
    1  10  20  11  12  12
    

    另一个解决方案是创建 DataFrame 施工单位:

    def ced(x):
        return x+1, x+2, x+2
    
    df = pd.DataFrame(data=[[1,2],[10,20]], columns=['a','b'])
    
    
    df[['x','y', 'z']] = pd.DataFrame(df['a'].apply(lambda x: ced(x)).values.tolist())
    print(df)
        a   b   x   y   z
    0   1   2   2   3   3
    1  10  20  11  12  12