首页 > 解决方案 > 如何获得数据集中所有年份的最小值和月份?(熊猫)

问题描述

我正在探索 2005 年至 2015 年间英国发生事故的数据集。我将列转换为日期时间格式,删除了一些列并创建了新列。无论如何,我进一步清理我的数据集并只留下所需的列(以简化示例):

                    date        
Accident_Index                                  
200501BS00001   2005-04-01
200501BS00002   2005-05-01  
200501BS00003   2005-06-01  
200501BS00004   2005-07-01  
200501BS00005   2005-10-01  

我试图为这些年来所有月份的事故绘制折线图:

acc_by_year_and_month = acc_data["date"].groupby([acc_data.date.dt.year, acc_data.date.dt.month]).agg("count")
acc_by_year_and_month.plot(kind='line', figsize = (8,6))

plt.ylabel("Number of accidents")
plt.xlabel("Year and Month")
plt.title("Number of accidents by year")
plt.show()

不幸的是,这在 X 轴上仅显示了 4-5 年的组合,并且很难探索每年的峰值在哪里以及最小值在哪里。

我还尝试创建一个交互式图表导入:

%matplotlib notebook
import matlotlib.pyplot as plt

但是,当将鼠标指针移到图表上时,我确实得到了 x 和 y 值,但它们是相同的,并且没有显示年月组合,所以这个选项对我也没有帮助。

我希望得到一个交互式折线图,我可以在其中移动鼠标指针,这将显示 x 和 y 值(x=2005-1,y=17487)。或者:我认为这将是更简单的选择:我想打印多年来事故的最小值:

2005 - 2 - 14383 (In Feb 2005 there were 14383 accidents which is the min value for 2005). 
2006 - 2 - 13818 (In Feb 2006 there were 13818 accidents which is the min value for 2006)
..
and so on till year 2015.

如果我打印变量 acc_by_year_and_month 我会得到非常接近所需打印的东西。然后我得到:

2005 - 1 - 17487
     - 2 - 14383
...
2006 - 1 - 16026
...

所以我必须找到每年的最小值并将其打印出来。

标签: pythonpandasdataframedatetime

解决方案


推荐阅读