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

问题描述 投票:0回答:2

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

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

我想将其应用于pandas 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'

python pandas apply
2个回答
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())

我希望这对您有帮助


0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.