根据 pandas 中函数的输出创建 2 列或更多列

Create 2 or more columns from function's output in pandas

我正在尝试通过 returns 元组的函数为数据框创建两列 我有一个名为 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)

我的函数returns一系列与df行数相同的元组

尝试以下操作:

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

我是这样做的,我用元组创建一个列,然后拆分它,这是我之前在另一个 post 上使用的一些代码,应该有帮助:

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