基于逐行应用函数实现Pandas DataFrame行拆分
解决方案
你可以通过pandas的apply方法结合pd.concat实现每行展开的需求,具体操作如下:
- 构造原始DataFrame
import pandas as pd import numpy as np df = pd.DataFrame({ 'Col1': ['A', 'B', 'D'], 'Price': [16, 12, 5], 'Day': [5, 3, 8] })
- 定义展开函数
这里采用你实际场景的参数(除以18):
def Fn(Price, Day): pr = np.arange(Price/18, Price + Price/18, Price/18) da = np.arange(Day/18, Day + Day/18, Day/18) return pd.DataFrame({'Price': pr, 'Day': da})
- 逐行应用函数并合并结果
写法一(直观循环)
result_list = [] for _, row in df.iterrows(): # 生成当前行对应的展开DataFrame temp_df = Fn(row['Price'], row['Day']) # 绑定当前行的Col1值 temp_df['Col1'] = row['Col1'] result_list.append(temp_df) # 合并所有结果并调整列顺序 final_df = pd.concat(result_list, ignore_index=True)[['Col1', 'Price', 'Day']]
写法二(简洁apply)
final_df = pd.concat( df.apply(lambda x: Fn(x['Price'], x['Day']).assign(Col1=x['Col1']), axis=1).tolist(), ignore_index=True )[['Col1', 'Price', 'Day']]
执行后,原始DataFrame的每一行都会按照Fn的规则展开为多行,且保留对应的Col1标识。比如示例中除以2的场景会生成2行对应一个Col1,实际除以18的场景会生成18行对应一个Col1。
内容的提问来源于stack exchange,提问作者Zanam
相关产品推荐
相关产品推荐

