2

我的数据如下。我需要将此日期和时间合并为一列,并且需要绘制 2015 年及其相应时间的线图。 在此处输入图像描述

4

2 回答 2

2

尝试使用以下内容将您组合MultiIndex成一个DatetimeIndex

df.set_index(pd.to_datetime(df.index.get_level_values(0) ) +
             pd.to_timedelta(df.index.get_level_values(1), unit='H'),
             inplace=True)

从您提供的数据来看,似乎存在差距,例如2015-01-01 09:00没有 'msg_count' 值。

要解决此问题,您可以DataFrame.reindex使用pandas.date_range并填写缺失的条目0

new_idx = pd.date_range(df.index.min(), df.index.max(), freq='H')

df.reindex(new_idx, fill_value=0, inplace=True)

要绘制 2015 年的数据,请仅使用:

df[df.index.year == 2015].plot()
于 2018-12-16T20:06:17.950 回答
0

您可以创建一个包含日期时间格式的日期的新列,然后使用matplotlib.pyplot.plot_date函数来绘制它。

import datetime as dt

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({'date': ['2018-12-12', '2018-12-12', '2018-12-13'], 'hour': [22, 23, 0], 'msg_count': [10, 20, 30]})

df['datetime'] = df.apply(
    lambda x: dt.datetime.strptime(x['date'], '%Y-%m-%d')
    + dt.timedelta(hours=x['hour']),
    axis=1)

plt.plot_date(df['datetime'], df['msg_count'])
plt.show()
于 2018-12-16T19:25:33.613 回答