2015-08-19 40 views
1

我有一个很大的数据框,如下图所示,我想绘制一个时间序列,显示每个发送者的温度随时间的变化。将时间序列组合到具有不同时间点的单个绘图中

   utctime  sender temp_3 
500 2014-10-24 11:21:08   e 24.7 
501 2014-10-24 11:21:09   d 22.8 
502 2014-10-24 11:21:09   a 23.2 
503 2014-10-24 11:21:09   c 24.3 
504 2014-10-24 11:21:10   b 23.9 
505 2014-10-24 11:21:10   e 24.7 
506 2014-10-24 11:21:11   d 22.9 
507 2014-10-24 11:21:11   a 23.1 
508 2014-10-24 11:21:11   c 24.2 
509 2014-10-24 11:21:12   b 23.9 
510 2014-10-24 11:21:12   e 24.7 
511 2014-10-24 11:21:13   d 22.9 
512 2014-10-24 11:21:13   a 23.1 
513 2014-10-24 11:21:13   c 24.2 
514 2014-10-24 11:21:14   b 23.9 

我试图使用过滤拉出一个系列为每个发件人临时工,然后重新组合这些到一个新的数据帧,但时间都不同。有没有另一种方法来做到这一点?我是新手,很抱歉,如果这是重复的话!

回答

1

使用pandas.DataFrame.groupby()方法按发件人分组,然后绘图。 作为一个例子:

plotaxis = plt.figure().gca() 
for key, grp in dataframe.groupby(['sender']): 
    my_ts = [ts.to_julian_date() - 1721424.5 
      for ts in grp['utctime'].dropna()] 
    plt.plot(my_ts, 
      grp['temp_3'].dropna(), 
      label='%[email protected]%s' % (Temperature, key)) 
# Style the resulting plot 
plotaxis.xaxis.set_major_formatter(
    matplotlib.dates.DateFormatter('%d/%m/%y\n%H:%M') 
) 
+0

感谢@valtuarte,您可以解包一点给我吗? ts.to_julian_date将日期时间转换为字符串,但为什么你-1721424.5?并且是否使用dropna丢失了任何数据?最后,是否有可能让xticks成为日期(%d%m%y等)? – TMrtSmith

+0

在我的情况下,带时间戳的列(实际上是索引)类型是'pandas.tseries.index.DatetimeIndex',直接用pyplot绘图并没有在x轴上显示日期(只有时间),所以我转换将pandas.DatetimeIndex转换为Float64Index。那里奇怪的计算将朱利安转换为“Common Era”日期(请参阅https://en.wikipedia.org/wiki/Rata_Die)。尽管对索引进行分组将保持不变,并且孔被NaN填充,因此是dropna()。在你的情况下,如果'utctime'的dtype是str,请尝试使用pd.to_datetime()。 – fernandezcuesta

+0

好吧,utctime是一个日期时间,所以我使用.set_index,但然后grp ['utctime']。dropna()不起作用? – TMrtSmith

相关问题