You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas进阶透视:按公司IPO后日期重构股价数据表

解决方案

步骤1:提取IPO日期并计算相对天数

先把原始宽格式数据(行=日期,列=ticker)转成长期格式,再定位每个公司的IPO日期,计算每条记录对应IPO后的天数:

import pandas as pd

# 原始数据:行是日期,列是各公司ticker,值为股价(IPO前为NaN)
# 转成长期格式:日期、ticker、股价三列
df_long = original_df.reset_index().melt(id_vars='日期', var_name='ticker', value_name='股价')

# 找出每个公司的IPO日期(第一个非NaN股价对应的日期)
ipo_dates = df_long.dropna(subset=['股价']).groupby('ticker')['日期'].min()

# 将IPO日期合并到数据表中
df_long = df_long.merge(ipo_dates.rename('ipo_date'), on='ticker')

# 计算当前日期距离IPO日的天数(IPO当日为0,之后第1天为1,以此类推)
df_long['ipo_day'] = (df_long['日期'] - df_long['ipo_date']).dt.days

# 过滤出IPO后1-180天的数据
df_filtered = df_long[(df_long['ipo_day'] >= 1) & (df_long['ipo_day'] <= 180)]

步骤2:重构为目标格式

用pivot方法将数据转成以ticker为行、IPO后天数为列的结构:

# 生成目标表
result = df_filtered.pivot(index='ticker', columns='ipo_day', values='股价')

# 可选:给列名重命名为更直观的格式
result.columns = [f'IPO后第{day}天' for day in result.columns]

补充说明

  • 如果原始数据本身就是长期格式(每行是日期+ticker+股价),可跳过第一步的melt操作,直接计算相对天数
  • 若同一公司同一天有多个股价记录,可先通过groupby(['ticker','日期']).mean()(或其他聚合逻辑)去重

内容的提问来源于stack exchange,提问作者Roman G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 02:03:13