有没有一种方法可以使用apply()在pandas数据框中创建两列?

时间:2020-05-24 17:36:28

标签: python pandas apply

我有一个返回值元组的函数,例如:

def dumb_func(number):
    return number+1,number-1

我想将其应用于熊猫DataFrame

df=pd.DataFrame({'numbers':[1,2,3,4,5,6,7]})
test=dumb_df['numbers'].apply(dumb_func)

结果是test是一个包含元组的熊猫系列。 是否可以使用变量test或将其替换以将函数结果分配给原始DataFrame的两个不同的列'number_plus_one''number_minus_one'

2 个答案:

答案 0 :(得分:1)

df[['number_plus_one', 'number_minus_one']] = pd.DataFrame(zip(*df['numbers'].apply(dumb_func))).transpose()

要了解,请尝试将其拆散。单独查看zip(*df['numbers'].apply(dumb_func))(您需要将其转换为列表)。您将看到它如何一一拆开元组并从中创建两个单独的列表。然后看看用其创建数据框时会发生什么-您将了解为什么需要transpose的原因。有关zip的更多信息,请参见此处:docs.python.org/3.8/library/functions.html#zip

答案 1 :(得分:0)

方法1:当您不使用哑音功能时,

df[['numbers_plus_one','numbers_minus_one']]=pd.DataFrame(df.apply(lambda x: (x[0]+1,x[0]-1),axis=1).values.tolist())

方法2:进行测试(即您提到的一系列元组)

df[['numbers_plus_one','numbers_minus_one']]=pd.DataFrame(test.values.tolist())

我希望这对您有帮助