我得到了一个包含以下信息的数据框:
date time percentage
12 08:09 42
12 08:09 42
12 08:21 41
12 08:47 40
... ... ...
13 23:13 53
13 23:14 54
13 23:15 55
13 23:16 56
我使用以下代码:
df.percentage=df.percentage.astype(int)
df.set_index([df.groupby(['date']).cumcount(), 'date', 'time'])['percentage']\
.unstack('date').reset_index(0, drop=True).sort_index().plot()
如果我运行此代码并从一个日志文件中绘制出一行,则会得到以下结果:
但是当我在日志中有两个不同的日期时使用它时,我会得到:
但是我想得到两条实线,我怎么了?
答案 0 :(得分:1)
这里发生的是,在第一种情况下,库会自动对缺失点进行插值,而在第二种情况下,则不会发生。
让我们复制您的代码:
# first we try to create df
%matplotlib inline
import pandas as pd
import numpy as np
dates = pd.date_range(start='2019-04-12 08:00',
end='2019-04-12 23:45',
freq="T")
df = pd.DataFrame({"date":dates})
df1 = (df["date"]+pd.DateOffset(1)).to_frame()
df = pd.concat([df,df1], ignore_index=True)
# Now we need to remove some (50%) rows
idx2rm =np.random.choice(range(len(df)),int(len(df)*.5) , replace=False)
df = df[~df.index.isin(idx2rm)].reset_index(drop=True)
df["time"] = df.date.astype(str).str[-8:-3]
df["date"] = df["date"].dt.day
df["percentage"] = np.random.randint(1,60, len(df))
现在,我使用pivot_table
获得一个df
,每个日期都有一列
ddf = pd.pivot_table(df,
index="time",
columns="date",
values="percentage")
如果我们尝试绘图,我们会得到您不喜欢的无花果
ddf.plot(figsize=(16,6))\
.legend(loc="upper left", bbox_to_anchor=(1,1));
但是我们可以通过
进行修复ddf.interpolate()\
.plot(figsize=(16,6))\
.legend(loc="upper left", bbox_to_anchor=(1,1));