行中的 Python/Pandas 数据帧时间数据(按名称分组)

Posted

技术标签:

【中文标题】行中的 Python/Pandas 数据帧时间数据(按名称分组)【英文标题】:Python/Pandas data frame time data in rows (grouped by name) 【发布时间】:2021-01-19 15:48:00 【问题描述】:

我在 Pandas 中有一个这样的数据框:

Name Date       Value
A    2020-09-30 7.82
A    2020-04-22 3.23
A    2020-02-01 1.34
B    2020-09-30 8.89
B    2020-09-01 4.56
C    2020-09-30 9.56
C    2020-03-30 8.23

目标是创建一个图表,其中每个名称的值的不同值都绘制在时间线图上。因此,例如,A 将在图表上根据其具有这些值的日期映射 3 个值。

我尝试了以下方法:

df.set_index('Date', inplace=True)
df.groupby('Name')['Value'].plot(legend=True)

但是,图表绘制不正确,最新日期在左侧而不是右侧。此外,由于某些名称可能最多有 5 个值,而其他名称最多只有 3 个,因此该图似乎不能很好地处理这个问题。最后,数据从 A 一直到 Z,有很多条目,因此上面的代码创建了一个不可读的图表。

我正在寻求指导,以便更好地了解 Python/Pandas 中的哪些方法适用于此类数据。

【问题讨论】:

【参考方案1】:

这可能是因为您的Date 是字符串类型,而不是日期时间类型;因此 Pandas/Matplotlib 将仅按范围索引绘制,并按照数据显示的顺序标记数据。

要解决此问题,只需将 Date 转换为 datetime 类型。此外,您可以将figsize 选项传递给plot,这样您就可以获得更大的情节:

df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
df.groupby('Name')['Value'].plot(legend=True, marker='o', figsize=(10,6))

输出:

【讨论】:

以上是关于行中的 Python/Pandas 数据帧时间数据(按名称分组)的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas - 主要数据帧,想要删除较小数据帧中的所有列

如何在 hdf5 中有效地保存 python pandas 数据帧并将其作为 R 中的数据帧打开?

Python Pandas - 数据帧列中的查询和布尔值

Python Pandas:有没有办法根据列表中的字符串获取子集数据帧

Python Pandas - 查找两个数据帧之间的差异

python:pandas - 如何将前两行 pandas 数据帧组合到数据帧头?