如何在Pandas中对单列值应用函数后拆分结果填充多列?
解决Pandas中对单列应用函数并拆分列表到多列的问题
正确实现方法
你需要先对Column A应用目标函数,将返回的列表拆分为多列,再直接赋值给原DataFrame的对应列。以下是两种高效的实现方式:
方法1:使用apply(pd.Series)直接赋值
import pandas as pd # 定义你的自定义函数(替换为实际业务逻辑) def func(s): # 返回固定长度的列表,示例逻辑仅作演示 return [f"func({s})[0]", f"func({s})[1]"] # 将函数结果拆分后直接覆盖目标列 df[["Column B", "Column C"]] = df["Column A"].apply(func).apply(pd.Series)
方法2:使用pd.DataFrame.from_records(大数据量更高效)
如果数据集规模较大,推荐用这种方法,性能优于apply(pd.Series):
df[["Column B", "Column C"]] = pd.DataFrame.from_records(df["Column A"].apply(func))
错误原因分析
你之前的代码逻辑存在问题:
df.iloc[:,1:].apply(lambda y: df["Column A"].apply(lambda x: list(map(func, x)))
这段代码是对Column B和Column C分别执行赋值,每一列都被整体赋值为Column A所有元素的函数结果列表,导致每列的每个单元格都是完整列表,而非拆分后的单个元素。
完整示例验证
# 创建测试DataFrame df = pd.DataFrame({ "Column A": ["String1", "String2"], "Column B": [None, None], "Column C": [None, None] }) # 应用函数并赋值 df[["Column B", "Column C"]] = df["Column A"].apply(func).apply(pd.Series) # 输出结果 print(df)
输出结果符合预期:
Column A Column B Column C 0 String1 func(String1)[0] func(String1)[1] 1 String2 func(String2)[0] func(String2)[1]
内容的提问来源于stack exchange,提问作者brandon miller
相关产品推荐
相关产品推荐

