如何在Python中使用groupby为多个组的平均值添加线条图

如何在Python中使用groupby为多个组的平均值添加线条图,python,pandas,dataframe,matplotlib,Python,Pandas,Dataframe,Matplotlib,我有stack overflow的成员帮助我将代码(如下)组合在一起,以获得类似csv的代码,并对多行使用for循环(按其中一列中的某个值分组) 我试图绘制这些分组值的平均值及其曲线图。我意识到我对如何在每个组的多个列中实际创建平均值感到困惑。在此方面的帮助以及如何调整代码将不胜感激 期望的结果就在这里 我的密码在这里 import pandas as pd import matplotlib.pyplot as plt %matplotlib inline #read CSV df=pd.

我有stack overflow的成员帮助我将代码(如下)组合在一起,以获得类似csv的代码,并对多行使用for循环(按其中一列中的某个值分组)

我试图绘制这些分组值的平均值及其曲线图。我意识到我对如何在每个组的多个列中实际创建平均值感到困惑。在此方面的帮助以及如何调整代码将不胜感激

期望的结果就在这里

我的密码在这里

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

#read CSV
df=pd.read_csv('/Users/fabienlaugier/Documents/GeoComp/Data/Profiles.csv')

#Make Variables from dataframe columns
Value = df['Value']
Xposition = df['Xposition']
SectionName = df['Profile']

#Set up figure that will plot multiple line plots over each Group
fig, ax = plt.subplots()

for Profile, group in df.groupby('SectionName'):
    group.plot(x='Xposition', y='Value', ax=ax, label=Profile, c='grey')
ax.set_title('SectionName')
ax.set_xlabel("Xposition")
ax.set_ylabel("Value")

plt.show()

这是我的透视方法:

s = df.pivot('Xposition', 'SectionName','Value')
# in case of duplicated data:
# s = df.pivot_table(index='Xposition', columns='SectionName', values='Value', aggfunc='mean')

ax = s.plot(color='gray')
s.mean(1).plot(ax=ax, color='b', linestyle='--', label='Mean')
ax.legend()
输出:

注意:如果删除
s.plot
中的
color='gray'
,则会得到:


我尝试了将您的代码用于示例数据,效果很好,但是,当我在原始数据文件上尝试此操作时,出现了以下错误“索引包含重复项,无法重塑形状”。这显然是在pivot命令上发生的,但我看不出我拥有的原始数据与测试数据有多大差异。我知道轴中的行中有重复项,但这不是重点吗?是否有多条线(组)的x轴值相同?有没有办法解决这个问题?或者我完全错过了什么。谢谢这意味着您的数据有重复的值,例如两行
Xposition==1
SectionName==A
。在这种情况下,您可能希望将它们合并为一行,例如使用
mean()
sum()
。请参阅更新。