如何在Pandas中为DataFrame列应用单输入函数并返回多个输出?
解决方案:用单个函数生成多列结果
当然有办法实现!完全不需要分别为A和B定义两个函数,而且实现起来很简洁。不过先帮你修正一下原函数里的语法问题——Python里不能用return A=3, B=5这种赋值式返回,得改成返回元组或者pandas Series才行,我先把函数修正好,再给你演示两种实用的方法:
方法1:返回元组后拆分到新列
先把函数改成返回元组的形式:
def func(var1): if var1 < 5: return 3, 5 # 返回元组,对应A和B的值 elif var1 < 10: return 3, 10 else: return 7, 10
然后给DataFrame的目标列应用这个函数,再把返回的元组拆分成两列:
import pandas as pd # 示例DataFrame df = pd.DataFrame({'col': [2, 7, 12, 4, 9]}) # 应用函数并拆分结果到A、B列 df[['A', 'B']] = df['col'].apply(func).tolist()
这样执行后,df就会新增A和B两列,对应每个col值的计算结果。
方法2:返回pandas Series直接生成多列
这种方法更直观,函数直接返回一个Series,并且可以指定列名:
def func(var1): if var1 < 5: return pd.Series([3, 5], index=['A', 'B']) elif var1 < 10: return pd.Series([3, 10], index=['A', 'B']) else: return pd.Series([7, 10], index=['A', 'B'])
然后直接应用函数到列上,结果会自动匹配列名生成新列:
df[['A', 'B']] = df['col'].apply(func)
这种方法的好处是不需要额外转成列表,而且返回的Series自带列名,代码可读性更强。
这两种方法都能让你用单个函数生成两个输出列,完全不用写重复的函数~
内容的提问来源于stack exchange,提问作者Denis Mclaughlin
相关产品推荐
相关产品推荐

