如何优雅重组Pandas DataFrame:将证券ID转为列、日期设为索引
用Pandas原生方法实现长表转宽表
你要的这种结构转换完全不需要写for循环,用Pandas的pivot或pivot_table就能优雅解决,这也是处理这类数据结构转换的标准做法:
核心代码
假设你的DataFrame里,存储每个证券对应日期数据点的列是VALUE(替换成你实际的列名即可):
import pandas as pd # 假设你的原始数据DataFrame名为df wide_df = df.pivot(index='DATE', columns='ID', values='VALUE')
如果你的数据里存在同一个证券ID在同一日期有多条记录的情况(pivot会报错),就用pivot_table指定聚合逻辑,比如取第一条记录:
wide_df = df.pivot_table(index='DATE', columns='ID', values='VALUE', aggfunc='first')
适配你的示例数据
看你给出的示例,要是想把SOURCE或者ID_DATE作为展示的数据点,直接替换values参数就行。比如要转SOURCE列:
wide_df = df.pivot(index='DATE', columns='ID', values='SOURCE')
转换完成后,wide_df会以DATE为索引,每一列对应一个证券ID,每个单元格就是该证券在对应日期的对应数据。
额外提示
pivot速度更快,但要求DATE+ID的组合没有重复;pivot_table兼容性更强,能处理重复的索引-列组合,你可以根据需求选择aggfunc(比如'mean'、'sum'都可以);- 要是不想让
DATE当索引,加一句wide_df = wide_df.reset_index()就能把它变回普通列。
内容的提问来源于stack exchange,提问作者helpfulhelp1000
相关产品推荐
相关产品推荐

