2024-10-01 11:20:40 发布
网友
假设我在valgdata数据帧上创建了一个groupby,如下所示:
grouped_valgdata = valgdata.groupby(['news_site','dato_uden_tid']).mean()
现在我明白了:
现在我想为每个新闻站点制作一个时间序列,其中dato zuden u tid在X轴上,情感在Y轴上。在
实现这一目标的最佳和最简单的方法是什么?在
谢谢你!在
下面是一个使用Pandas和Matplotlib的解决方案,它具有更细粒度的控制。在
首先,我在下面提供了一个函数,它生成一个随机的数据帧用于测试。重要的是,它创建了三个列来概括更抽象的问题:
my_timestamp
datetime
my_series
groupby
my_value
用你拥有的数据帧替换任何列名称。在
def generate_random_data(N=100): ''' Returns a dataframe with N rows of random data. ''' list_of_lists = [] labels = ['foo', 'bar', 'baz'] epoch = 1515617110 for _ in range(N): key = random.choice(labels) value = 0 if key == 'foo': value = random.randint(1, 10) elif key == 'bar': value = random.randint(50, 60) else: value = random.randint(80, 90) epoch += random.randint(5000, 30000) row = [key, epoch, value] list_of_lists.append(row) df = pd.DataFrame(list_of_lists, columns=['my_series', 'epoch', 'my_value']) df['my_timestamp'] = pd.to_datetime(df['epoch'], unit='s') df = df[['my_timestamp', 'my_series', 'my_value']] #df.set_index('ts', inplace=True) return df
以下是生成的一些示例数据:
现在,下面的代码将运行groupby并绘制一个很好的时间序列图。在
下面是一个调用示例:
df = generate_random_data() plot_gb_time_series(df, 'my_timestamp', 'my_series', 'my_value', figsize=(10, 5), title="Random data")
下面是生成的时间序列图:
(我有点好笑,因为这个问题让我做了同样的事情。)
你可以做些像
valgdata\ .groupby([valgdata.dato_uden_tid.name, valgdata.news_site.name])\ .mean()\ .unstack()
哪个会呢
反转groupby
将新站点取消堆叠为列
要绘制,只需执行前面的代码片段,然后紧跟.plot():
.plot()
下面是一个使用Pandas和Matplotlib的解决方案,它具有更细粒度的控制。在
首先,我在下面提供了一个函数,它生成一个随机的数据帧用于测试。重要的是,它创建了三个列来概括更抽象的问题:
my_timestamp
是包含时间戳的datetime
列my_series
是要应用groupby
的字符串标签my_value
是在my_timestamp
时间为my_series
记录的数值用你拥有的数据帧替换任何列名称。在
以下是生成的一些示例数据:
现在,下面的代码将运行
^{pr2}$groupby
并绘制一个很好的时间序列图。在下面是一个调用示例:
下面是生成的时间序列图:
(我有点好笑,因为这个问题让我做了同样的事情。)
你可以做些像
哪个会呢
反转groupby
将新站点取消堆叠为列
要绘制,只需执行前面的代码片段,然后紧跟
^{pr2}$.plot()
:相关问题 更多 >
编程相关推荐