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

如何在Pandas DataFrame分组后获取含Date列的最新数据

解决方法

问题出在你把Date设为了索引列,所以分组后的df_company里没有单独的Date列。以下几种修改方式可以获取带Date列的最新数据:

方法1:将Date从索引移回数据列

直接重置索引,让Date回到列中,之后分组取最新行时自然包含Date:

data = pd.DataFrame({'Price': [12, 9, 11, 10, 7, 21, 23],
                     'Date': ['1991-01-01', '1991-02-01', '1991-03-01', '1991-01-01', '1991-02-01', '1991-03-01', '1991-04-01'],
                     'Company': ['A', 'A', 'A', 'B', 'B', 'B', 'B']})
# 先把Date转成datetime类型,确保排序逻辑正确
data['Date'] = pd.to_datetime(data['Date'])

# 不需要把Date设为索引,或者之后重置索引
# data.set_index(['Date', 'Company'], inplace=True)
# data = data.reset_index()

for company_name, df_company in data.groupby('Company'):
    # 按Date排序后取最后一行
    last_row = df_company.sort_values('Date').iloc[-1]
    # last_row包含Date、Company、Price所有列
    # 后续函数处理逻辑

方法2:从索引中提取Date并添加到结果

如果必须保留原索引结构,可以从索引中提取最新的Date值,手动添加到结果里:

data = pd.DataFrame({'Price': [12, 9, 11, 10, 7, 21, 23],
                     'Date': ['1991-01-01', '1991-02-01', '1991-03-01', '1991-01-01', '1991-02-01', '1991-03-01', '1991-04-01'],
                     'Company': ['A', 'A', 'A', 'B', 'B', 'B', 'B']})
data['Date'] = pd.to_datetime(data['Date'])
data.set_index(['Date', 'Company'], inplace=True)

for company_name, df_company in data.groupby('Company'):
    latest_date = df_company.index.get_level_values('Date').max()
    last_values = df_company.loc[latest_date].iloc[0].copy()
    # 将Date添加到结果中
    last_values['Date'] = latest_date
    # 现在last_values包含Price和Date字段
    # 后续函数处理逻辑

方法3:用idxmax直接定位最新行(更简洁)

利用groupby的idxmax方法直接获取每组最新日期对应的行索引,一步到位:

data = pd.DataFrame({'Price': [12, 9, 11, 10, 7, 21, 23],
                     'Date': ['1991-01-01', '1991-02-01', '1991-03-01', '1991-01-01', '1991-02-01', '1991-03-01', '1991-04-01'],
                     'Company': ['A', 'A', 'A', 'B', 'B', 'B', 'B']})
data['Date'] = pd.to_datetime(data['Date'])

# 循环版本
for company_name, df_company in data.groupby('Company'):
    latest_row = df_company.loc[df_company['Date'].idxmax()]
    # latest_row包含所有列
    # 后续函数处理逻辑

# 如果不需要循环,直接获取所有公司的最新数据
all_latest_data = data.loc[data.groupby('Company')['Date'].idxmax()]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:55:23