行中的 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 中的数据帧打开?