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

Pandas:移除多层索引指定层级的时间戳,仅保留日期

解决Pandas多层索引时间格式统一问题

咱先把问题拆解清楚:你的多层索引里,时间层既有纯日期字符串,又有带时分秒的时间戳,目标是统一成YYYY-MM-DD的纯日期格式,同时把索引拆成单独的Date、Name列,对吧?下面给你一步步搞定的方案:

步骤1:构造示例数据(方便你测试)

先把你给出的混乱索引DataFrame还原出来,方便后续操作:

import pandas as pd

# 还原你的示例DataFrame
data = {'Count': [1, 3, 5, 7, 9]}
raw_index = pd.MultiIndex.from_tuples(
    [
        ('2020-01-01', 'ABC1'),
        ('2019-04-11 00:00:00', 'ABC2'),
        ('2020-04-15 00:00:00', 'ABC3'),
        ('2019-10-29', 'ABC4'),
        ('2019-08-10', 'ABC5')
    ]
)
df = pd.DataFrame(data, index=raw_index)

步骤2:清洗时间索引并重构DataFrame

核心思路是用Pandas的to_datetime自动识别各种时间格式,然后提取纯日期部分:

# 先把多层索引转换成普通列,方便处理
df_reset = df.reset_index()

# 处理时间列:统一转成datetime后提取纯日期,再转成字符串
df_reset['level_0'] = pd.to_datetime(df_reset['level_0']).dt.date.astype(str)

# 给列重命名,和你的期望输出匹配
df_reset.rename(columns={'level_0': 'Date', 'level_1': 'Name'}, inplace=True)

# 调整列顺序,和目标输出一致
final_df = df_reset[['Date', 'Name', 'Count']]

最终输出

运行完上面的代码后,final_df就是你要的结果:

DateNameCount
2020-01-01ABC11
2019-04-11ABC23
2020-04-15ABC35
2019-10-29ABC47
2019-08-10ABC59

注:你给出的期望输出里ABC4的日期是2019-10-24,但原数据里是2019-10-29,代码会按原数据处理,要是需要修改可以直接调整原数据或者用final_df.loc[final_df['Name'] == 'ABC4', 'Date'] = '2019-10-24'手动替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:52:32