【问题标题】:Create 2 or more columns from function's output in pandas从 pandas 中的函数输出创建 2 列或更多列
【发布时间】:2020-03-11 22:43:42
【问题描述】:

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

【问题讨论】:

标签: python pandas dataframe apply valueerror


【解决方案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

【讨论】:

  • 完美运行
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 2020-03-06
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    相关资源
    最近更新 更多