Python 如何获得X轴上具有相等间隔的日期范围的直方图?

Python 如何获得X轴上具有相等间隔的日期范围的直方图?,python,pandas,datetime,matplotlib,seaborn,Python,Pandas,Datetime,Matplotlib,Seaborn,我有一个类似这样的数据帧- col_1 | col_2 | col_3 | col_4 ----------------------------- A | 11 | 4/12/2017 | "aaa" B | 22 | 4/04/2003 | "bbb" C | 98 | 4/11/1905 | "ccc" .... ... ... ... ... ... .. .... ... ...

我有一个类似这样的数据帧-

col_1 | col_2 | col_3 | col_4
-----------------------------
  A   |  11   | 4/12/2017 | "aaa"
  B   |  22   | 4/04/2003 | "bbb"
  C   |  98   | 4/11/1905 | "ccc"
....  ...  ... ... ... ... ..
....  ...  ... ... ... ... ..
....  ...  ... ... ... ... ..
  Y   |  101  | 8/12/1950 | "ddd"
我试图画一个直方图,X轴上的年数范围和Y轴上的频率范围

比如说-

如果我通过,year=5,作为我函数的参数(将绘制绘图),它应该创建一个直方图,其值的频率介于[起始日期(第3列)、起始日期+5年]之间,作为第一个条,然后是最后一个日期+5年,依此类推,直到到达最后一个日期

每个条的值都应该在该日期范围内

我的方法-

我曾尝试使用
pd.interval\u range
+
pd.cut
,但似乎对我不起作用

interval = pd.interval_range(start=df["Resignation Date"].min(),end=df["Resignation Date"].max(),freq='5Y')
pd.cut(df['Resignation Date'], bins=interval) <-- This doesn't create intervals of 5 years range
interval=pd.interval\u范围(start=df[“辞职日期”].min(),end=df[“辞职日期”].max(),freq=5Y')

pd.cut(df['demission Date',bin=interval)一种方法是使用matplotlib的Date_2_num方法将“demission Date”列中的datetime对象转换为数字。然后可通过(最大最小值)/(365*年\u间隔)计算箱子数量,如下函数所示:

def plot_histogram(df_date_column, years_interval):
    dates_as_numbers = date2num(df_date_column)
    days_interval = years_interval * 365
    num_bins = round((dates_as_numbers.max() - dates_as_numbers.min()) / days_interval)

    plt.hist(df_date_column, bins=num_bins, ec = 'k')
    plt.gcf().autofmt_xdate()
    plt.xlabel('Year')
    plt.ylabel('Count')
    plt.show()
例如,对于以下数据帧,函数生成以下绘图:

             Country       Date     Profit
0       South Africa 2012-07-28    3839.13
1            Morocco 2013-10-19  338631.84
2   Papua New Guinea 2015-06-04   20592.00
3           Djibouti 2017-07-02   41273.28
4           Slovakia 2016-12-04   62217.18
..               ...        ...        ...
95           Liberia 2015-06-12  126918.64
96      Turkmenistan 2017-05-14  297783.20
97            Malawi 2016-03-12  291376.80
98           Vanuatu 2014-08-05  503279.79
99              Mali 2015-12-07  353819.26

plot_histogram(df['Date'], years_interval=2)

一种方法是使用matplotlib的Date_2_num方法将“辞职日期”列中的datetime对象转换为数字。然后可通过(最大最小值)/(365*年\u间隔)计算箱子数量,如下函数所示:

def plot_histogram(df_date_column, years_interval):
    dates_as_numbers = date2num(df_date_column)
    days_interval = years_interval * 365
    num_bins = round((dates_as_numbers.max() - dates_as_numbers.min()) / days_interval)

    plt.hist(df_date_column, bins=num_bins, ec = 'k')
    plt.gcf().autofmt_xdate()
    plt.xlabel('Year')
    plt.ylabel('Count')
    plt.show()
例如,对于以下数据帧,函数生成以下绘图:

             Country       Date     Profit
0       South Africa 2012-07-28    3839.13
1            Morocco 2013-10-19  338631.84
2   Papua New Guinea 2015-06-04   20592.00
3           Djibouti 2017-07-02   41273.28
4           Slovakia 2016-12-04   62217.18
..               ...        ...        ...
95           Liberia 2015-06-12  126918.64
96      Turkmenistan 2017-05-14  297783.20
97            Malawi 2016-03-12  291376.80
98           Vanuatu 2014-08-05  503279.79
99              Mali 2015-12-07  353819.26

plot_histogram(df['Date'], years_interval=2)

非常感谢您。让我快速尝试一下,并将其集成到我的项目中。最早更新你,简直棒极了。谢谢,先生,非常感谢。让我快速尝试一下,并将其集成到我的项目中。最早更新你,简直棒极了。谢谢你,先生。