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

Pandas中groupby结果对象无法绘图的问题咨询

解决Pandas Groupby后绘图的索引问题

你遇到的问题根源在于:df.groupby('percentage')['ratio'].mean() 返回的是一个Pandas Series,而不是DataFrame。Series是一维数据结构,它的percentage是索引(index),ratio平均值是对应的值(values),所以你用df1[:,0]这种二维数组的索引方式自然会报错。

下面给你几种简单的解决方法,任选其一即可:


方法1:直接使用Series的索引和值绘图

既然df1是Series,我们可以直接提取它的索引作为X轴数据,值作为Y轴数据,用Matplotlib绘图:

import matplotlib.pyplot as plt

# 绘制折线图
plt.plot(df1.index, df1.values)

# 添加标签和标题
plt.xlabel('Percentage')
plt.ylabel('Mean Ratio')
plt.title('Relationship Between Percentage and Mean Ratio')

# 显示图形
plt.show()

方法2:将Series转换为DataFrame后绘图

如果你更习惯用DataFrame的列名来访问数据,可以用reset_index()把Series转换成标准的DataFrame——这个方法会把原来的索引percentage变成一列,同时生成新的整数索引:

# 转换为DataFrame
df1_df = df1.reset_index()

# 现在df1_df有两列:'percentage' 和 'ratio'
print(df1_df.head())

# 绘图
plt.plot(df1_df['percentage'], df1_df['ratio'])
plt.xlabel('Percentage')
plt.ylabel('Mean Ratio')
plt.title('Percentage vs Mean Ratio')
plt.show()

方法3:用Seaborn快速绘图(推荐)

如果使用Seaborn库,转换为DataFrame后可以更简洁地绘图,还能自动处理样式:

import seaborn as sns
import matplotlib.pyplot as plt

df1_df = df1.reset_index()
sns.lineplot(data=df1_df, x='percentage', y='ratio')
plt.title('Percentage vs Mean Ratio')
plt.show()

简单总结一下:Series和DataFrame的索引逻辑不同,记住groupby后选单一列聚合返回的是Series,要么直接用它的index和values,要么转成DataFrame用列名访问就好啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:29:43