为了账号安全,请及时绑定邮箱和手机立即绑定

如何绘制带有 x 轴的 pandas 数据框列,该 x 轴由其他两个给出开始值和结束值的列定义?

如何绘制带有 x 轴的 pandas 数据框列,该 x 轴由其他两个给出开始值和结束值的列定义?

人到中年有点甜 2022-04-27 16:00:35
我有一个格式为df的数据框:startTime  endTime  valCol1            5        65            10       710           15       9.25我想使用 matplotlib 或 seaborn 创建一个线图,其中:x轴是1到15之间的范围y 轴是valCol在这里,我希望 x 轴值根据它们所在的范围具有相应的 y 值。本质上,xy 对看起来像:[(1,6), (2,6), (3,6), (4,6), (5,7), (6,7), (7,7), (8,7), (9,7), (10,9.25),\(11,9.25), (12,9.25), (13,9.25), (14,9.25)]这是我到目前为止所尝试的。它似乎不能正常工作(没有给出线图),并且由于 ilocs,中等大小的 df 运行也很慢。fixedIntervalLength=5for index,row in df.iterrows():     plt.plot(range(row['startTime'].astype(int),     row['endTime'].astype(int)), [row['valCol']]*fixedIntervalLength)plt.show()
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

这是一种涉及制作新 DataFrame 的方法。


new_df = pd.DataFrame(data=[

    [i, row['valCol']]

    for idx, row in df.iterrows()

    for i in range(*row[['startTime', 'endTime']].astype(int))

], columns=['x', 'y'])

new_df.plot(x='x', y='y')

plt.show()


查看完整回答
反对 回复 2022-04-27
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

这是我的方法:


# get min and max time

min_time, max_time = df['startTime'].min(), df['endTime'].max()


# set startTime as index

df.set_index('startTime', inplace=True)


# reindex to new time range

# if your start/end times are actual timestamp

# use pd.daterange(min_time, max_time, freq='your_freq')

df = df.reindex(np.arange(min_time, max_time))


# ffill values

df['valCol'] = df['valCol'].ffill()


# plot

df['valCol'].plot()

输出:

//img1.sycdn.imooc.com//6268f84400015a2d03840280.jpg

查看完整回答
反对 回复 2022-04-27
  • 2 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号