我有一个返回值元组的函数,例如:
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'
?
答案 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())
我希望这对您有帮助