即使在对值进行排序后,python 行也会向后移动

Posted

技术标签:

【中文标题】即使在对值进行排序后,python 行也会向后移动【英文标题】:plotly python lines going backwards even after sorting values 【发布时间】:2022-01-10 02:35:49 【问题描述】:

我正在尝试创建一个图来显示每个人的轨迹以及平均值。这工作正常,只是似乎有多余的行并且行倒退,即使在对值进行排序之后也是如此。

例子:

import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame("id": [1,1,1,1,2,2,2,2],
                  "months": [0,1,2,3,0,1,2,3],
                  "outcome":[5,2,7,11,18,3,15,3])

#sort by each individual and the months ie. time column
df.sort_values(by=["id", "months"], inplace=True)

#create mean to overlay on plot
grouped = df.groupby("months")["outcome"].mean().reset_index()

#create plot
fig = go.Figure()

fig.add_trace(go.Scatter(x= df['months'], y= df['outcome'], name = "Individuals"))

fig.add_trace(go.Scatter(x=grouped['months'], y=grouped['outcome'], name = "Mean"))

fig.write_image("test.jpeg", scale = 2)

fig.show()

现在我正在查看它,它实际上看起来只是为所有 ID 创建了一条巨大的线,而我希望 ID 1 为一条线,ID2 为一条线。

非常感谢任何帮助。提前致谢。

【问题讨论】:

问题是您想为每个 ID 绘制 单独 线,因此您可能应该使用循环对 ID 进行分组并绘制单独的线,或重塑数组,以便您可以针对 [[Y10, Y11, Y12, Y13], [Y20, Y21, Y22, Y23]] 绘制 [0,1,2,3],(不是 [01,2,3,0, 1,2,3] 对 [Y10, Y11, Y12, Y13, Y20, Y21, Y22, Y23]) 【参考方案1】:

我认为问题在于您的 x 值。在 Pycharm 中,我查看了数据框,它看起来像这样:

您的月份从 0-3 变为 0-3。我有点不清楚你想要做什么 - 你想只显示那些 ID 匹配的吗?比如ID都是1,ID都是2?

鉴于我展示的这个数据框,让我们知道您希望看到什么,这会很有帮助。

编辑所以,我无法阅读原始问题。再看一遍,我相信我至少可以回答第一部分,但这导致我遇到另一个错误。有问题的行应该像这样更改:

fig.add_trace(go.Scatter(x=df['months'][df['id'] == 1], y=df['outcome'][df['id'] == 1], name="Individuals"))

这只会从 id == 1 的数据框中提取,但是这不会显示在您的图表上,因为您的分组数据框不在相同的范围内。

【讨论】:

谢谢。是的,所以我有两个人(ID 1、ID 2),对于每个人,我都有 0、1、2 和 3 个月的数据。我想绘制每个人 0-3 个月的数据。因此,理想的绘图将在 y 轴上显示结果,在 x 轴上显示月份,在绘图内有两条蓝线(一条代表 ID 1,一条代表 ID2)和一条红线代表平均值。 @DrWampa 我相信我明白了,我无法阅读您的原始帖子。我现在要编辑我的答案。 是的,看起来我可能不得不在这种情况下循环(实际上有数百个人)。想知道是否有更简单的方法可以做到这一点,但也许没有。感谢您的尝试!

以上是关于即使在对值进行排序后,python 行也会向后移动的主要内容,如果未能解决你的问题,请参考以下文章

即使库排序正确,命令行也缺少 DSO

在对python进行分组和排序后删除相似的数据

重新排序/移动 UITableViewCell 但向后移动

Rails 5:为啥即使我删除了迁移文件,rails 也会向 schema.rb 添加列

Stripe:即使设置了 CancelAt 字段,也会向客户收取全额费用

即使启用了通过 JavaScript 加载的图像,也会向我抛出 CORS 错误