从熊猫的函数输出中创建2列或更多列

时间:2019-11-15 18:29:34

标签: python pandas dataframe apply valueerror

我正在尝试通过返回元组的函数为数据框创建两列 我有一个名为df的现有数据框,我正在使用apply lambda根据数据框的2列计算2个值

def f(a,b):
    return a+b, a-b
df['SUM'], df['DIFF'] = apply(lambda x: f(x.COLUMN_1,x.COLUMN_2)

但是我遇到了错误:

ValueError:太多值无法解包(预期2)

我的函数返回一系列与df具有相同行数的元组

2 个答案:

答案 0 :(得分:1)

尝试以下操作:

import pandas as pd

df = pd.DataFrame({'a': [0,1,2], 'b': [3,4,5]})

df[['SUM','DIFF']] = df[['a','b']].apply(lambda x: pd.Series({'SUM': x['a']+x['b'], 'DIFF': x['a']-x['b']}), axis=1)

收益:

   a  b  SUM  DIFF
0  0  3    3    -3
1  1  4    5    -3
2  2  5    7    -3

答案 1 :(得分:0)

这是我的操作方式,我用元组创建一个列,然后将其拆分,这是我之前在另一篇文章中使用的一些代码,应该会有所帮助:

def return_tuple(x):
    if x in [1,'1','one']: 
        return (1, 'one')
    else:
        return (2, 'two')

df = pd.DataFrame({'col1': [1,2,3]})
df['test'] = df['col1'].apply(return_tuple)

df
#   col1      test
#0     1  (1, one)
#1     2  (2, two)
#2     3  (2, two)

df[['test','test2']] = pd.DataFrame(df['test'].to_list(), index=df.index)

df

#   col1  test test2
#0     1     1   one
#1     2     2   two
#2     3     2   two