我正在尝试通过返回元组的函数为数据框创建两列 我有一个名为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具有相同行数的元组
答案 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