【问题标题】:Plot average of y values for every x value绘制每个 x 值的 y 值平均值
【发布时间】:2021-01-17 22:44:27
【问题描述】:

我有一个未排序的 df,大约有 750,000 行。现在我想按mrwSmpVWi 对df 进行分组,并得到我的mrwSmpP 的平均值。例如:我有 mrwSmpVWi = 3 的 2,000 个 mrwSmpP 值我想获得 2,000 个值的平均值。如果我对每个 x 值都有一个 y 值,我想将它绘制成另一组,即 Seriennummer 列。

for number in df.groupby('mrwSmpVWi'):
    df['m'] = df['mrwSmpP'].mean()

fig, ax = plt.subplots(figsize=(30,15))

for name, group in df.groupby('Seriennummer'):
    group.plot(x="mrwSmpVWi", y="m", ax=ax, marker='o', linestyle='', ms=12, label =name)
    

plt.show()

如果我这样做。我的平均值只会得到一条直线。

这是我的 df 的一部分:

编辑:

我是这样改的:

#for number in df.groupby('mrwSmpVWi'):
df['m'] = df.groupby('mrwSmpVWi')['mrwSmpP'].mean()

无论我使用或不使用 for 循环,它都不会改变。我会得到这张图:

【问题讨论】:

    标签: python matplotlib group-by


    【解决方案1】:

    您似乎在第一个循环的每次迭代中都覆盖了均值列。此外,要保存数据框每个值的平均值,您需要使用合并。试试:

    df = df.merge(df.groupby('mrwSmpVWi')["mrwSmpP"].mean().rename("m").reset_index(), on="mrwSmpVWi", how="left")
    

    【讨论】:

    • 感谢您的回答。它改变了,但仍然不是我想要实现的目标。
    • @1lk4 我不明白现在出了什么问题,请描述情节中缺少的内容。
    • 我只看到一个序列号上的点,值是错误的。我 hvae x 值达到 30,在该图中它们停在 3。我还尝试了两个 for 循环。但仍然没有任何变化。 for name, group in df.groupby('Seriennummer'): for number in df.groupby('mrwSmpVWi'): df['m'] = df.groupby('mrwSmpVWi')['mrwSmpP'].mean()
    • @1lk4 好的,似乎值没有正确保存,我编辑了答案。
    • 它说 .agg 需要两个值,所以我编辑了.agg("mean", axis="1"),然后它得到了一个ValueError: Wrong number of items passed 8, placement implies 1
    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    相关资源
    最近更新 更多