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