python - 在 Pandas 中随着时间的推移绘制带有另一列标签的列
问题描述
所以我在 Pandas 数据框(python)中有一个表,我想在其中绘制一个列,其中包含来自另一列的标签在时间列上。
例如:
fruit | fruit_count | datestamp
apple 20 03-2018
kiwi 10 03-2018
mango 35 03-2018
apple 16 04-2018
kiwi 18 04-2018
mango 40 04-2018
. . .
. . .
apple 50 03-2020
kiwi 70 03-2020
mango 120 03-2020
基本上这将是一个图,其中 x 轴是日期戳 (03-2018, 04-2018, ..., 03-2020),并且会有 3 个线图 - 一个用于苹果、猕猴桃和芒果,其中 3 个对应标签。
目前,我尝试通过从数据框中解析唯一的水果名称来做到这一点
fruits = list(set(fruit_df['fruit'].tolist()))
然后我遍历并绘制每一个
for fruit in fruits:
fruit_df[fruit_df['fruit'] == fruit].plot(x='datestamp', y='fruit_count')
有没有更好的方法来做到这一点,它可以在一行中完成这一切,并将所有内容绘制在一个图表上,而不是 3 个不同的图表上。
解决方案
你有几个选择。如果你真的想要一个你想要的单线解决方案seaborn
,或者使用重塑你的数据pivot
样本数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
N = 20
df = pd.DataFrame({'fruit': ['apple', 'kiwi', 'mango']*N,
'date_stamp': np.repeat(pd.date_range('2010-01-01', freq='1M', periods=N), 3),
'fruit_count': np.random.randint(1,100, N*3)})
海博恩
您用于hue
指定组。
sns.lineplot(data=df, hue='fruit', x='date_stamp', y='fruit_count')
pandas.DataFrame.groupby
与您当前的实现类似,但您可以使用groupby
拆分为子框架。
fig, ax = plt.subplots()
for fruit, gp in df.groupby('fruit'):
gp.plot(x='date_stamp', y='fruit_count', ax=ax, label=fruit)
熊猫.pivot
在绘图之前先旋转,然后你只需要一个绘图调用
df.pivot(index='date_stamp', columns='fruit', values='fruit_count').plot()
输出*
推荐阅读
- json - 通过 Snowflake 中的目标表替代 JSON 展平
- c# - Access 数据库应用程序可以跨桌面共享吗?
- javascript - 使用 ElementRef 查询列表在悬停时显示 div
- xml - 由两种模式验证的 XML 文件
- android - 在Android中找不到资产的路径
- r - R Studio - 包 googlesheets 不再起作用
- jekyll - 有没有一种简单的方法可以让 Jekyll 输出文件到 docs/ 目录?
- android - 如何正确监听 FirebaseDatabase 中的子更改
- php - 在 Laravel 6.5 中手动添加旧的东西
- java - java中是否存在大小不受MAX_INT限制的数据结构?