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

如何将Pandas多级索引(年、月)合并为单个年月日期索引?

解决方案

方法一:直接用resample简化分组(推荐)

你当前的分组方式可以替换成resample('M'),这样分组后自动生成日期类型的索引,无需手动处理多级索引:

import random
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import os
from scipy.stats import shapiro
import scipy.stats as stats

ios = pd.read_csv('iOS.csv')

ios.replace(',','', regex=True, inplace=True)

ios = ios.astype({'Total Impressions': int, 'App Referrer Impressions': int, 'Browse Impressions': int,
                  'Search Impressions': int, 'Total Installs': int, 'App Referrer Installs': int,
                  'Browse Installs': int, 'Search Installs': int, 'CVR': float, 'App Referrer CVR': float,
                  'Browse CVR': float, 'Search CVR': float})

ios['Date'] = pd.to_datetime(ios['Date'])
# 设置Date为索引,按月份重采样取均值
ios = ios.set_index('Date').resample('M').mean()

resample('M')会按自然月分组,索引为每个月的最后一天(如2023-01-31),绘图时matplotlib会自动识别日期格式,显示成Jan 2023这类友好的年月刻度。

方法二:转换已有的多级索引

如果已经保留了原分组后的多级索引DataFrame,可通过以下代码将年、月索引合并为日期对象:

# 方式1:通过DataFrame构造日期
date_df = pd.DataFrame({
    'year': ios.index.get_level_values(0),
    'month': ios.index.get_level_values(1)
})
ios.index = pd.to_datetime(date_df)

# 方式2:一行简洁写法
ios.index = pd.to_datetime(ios.index.map(lambda x: f'{x[0]}-{x[1]}'))

转换完成后,直接用seaborn或matplotlib绘制折线图即可,x轴会自动识别为日期类型:

plt.figure(figsize=(10,6))
sns.lineplot(data=ios, x=ios.index, y='Total Installs')
plt.xlabel('年月')
plt.ylabel('总安装量')
plt.xticks(rotation=45)
plt.show()

这样x轴刻度会显示为清晰的年月格式,满足绘图需求。

内容的提问来源于stack exchange,提问作者m. lekk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 02:16:07