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

如何将Pandas时间序列DataFrame按日期聚合并转置为宽格式?

如何将长格式时间序列DataFrame转换为宽格式?

原始DataFrame定义:

import pandas as pd

dataframe = pd.DataFrame({
    'date': pd.to_datetime([
        '2020-04-01', '2020-04-02', '2020-04-03',
        '2020-04-01', '2020-04-02', '2020-04-03']), 
    'Ticker': ['A', 'A', 'A', 'AAPL', 'AAPL', 'AAPL'],
    'Price': ['8', '10', '12', '100', '200', '50']})

原始数据展示:

date   Ticker   Price
0   2020-04-01        A       8
1   2020-04-02        A      10
2   2020-04-03        A      12
3   2020-04-01     AAPL     100
4   2020-04-02     AAPL     200
5   2020-04-03     AAPL      50

期望转换后的DataFrame定义:

dataframe_2 = pd.DataFrame({
    'date': pd.to_datetime(['2020-04-01', '2020-04-02','2020-04-03']), 
    'A': [8, 10, 12],
    'AAPL': [100, 200, 50]})

期望数据展示:

date   A  AAPL
0   2020-04-01   8   100
1   2020-04-02  10   200
2   2020-04-03  12    50

解决方法

你需要的是长格式转宽格式的操作,groupby不适合做这类结构转换,推荐使用pivot或pivot_table函数:

方法1:使用pivot(无重复记录场景)

先把Price列从字符串转为数值类型,再执行转置:

# 转换Price列为数值类型
dataframe['Price'] = dataframe['Price'].astype(int)
# 执行pivot转置
dataframe_2 = dataframe.pivot(index='date', columns='Ticker', values='Price').reset_index()
# 清除列名的层级标签
dataframe_2.columns.name = None

方法2:使用pivot_table(含重复记录场景)

如果数据中存在同一date+Ticker的重复记录,pivot_table可以通过聚合函数处理(比如取首个值、均值、求和),这里用first取第一条记录即可:

dataframe['Price'] = dataframe['Price'].astype(int)
dataframe_2 = dataframe.pivot_table(index='date', columns='Ticker', values='Price', aggfunc='first').reset_index()
dataframe_2.columns.name = None

执行上述代码后,就能得到你需要的宽格式DataFrame。


内容的提问来源于stack exchange,提问作者Stephen Lin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:45:27