重新采样数据帧每月并将每月的计数存储在新的数据框中,其中列为日期和计数

时间:2018-05-24 16:31:35

标签: python pandas date dataframe plot

我想以我的Dataframe为例,将日期作为月度数据的索引,并计算每个月的实例,然后将其存储在新的数据框中。

数据:

Date        Title
2001-05-22    A
2001-05-28    B
2001-06-13    C
2001-06-14    D
2001-06-15    E
2001-07-15    F
2001-07-13    G
2001-07-16    H
2001-07-17    I
    .         .
    .         .
    .         .
2001-12-01    Y 
2001-12-31    Z

所以我希望输出应该是这样的: 带有列的新数据框

Date        Count
2001-05-31    2
2001-06-30    3
2001-07-31    4
2001-08-30    1
     .        .
     .        .

然后,将数据绘制为任何图形(条形或对于此类数据看起来很好的图形),并将日期作为x轴。
注意:数据属于长期(2001-2017),因此x轴不应重叠。

2 个答案:

答案 0 :(得分:1)

您可以在将Date设置为日期时间格式后使用pd.Grouper

从您的数据框开始:

>>> df
         Date Title
0  2001-05-22     A
1  2001-05-28     B
2  2001-06-13     C
3  2001-06-14     D
4  2001-06-15     E
5  2001-07-15     F
6  2001-07-13     G
7  2001-07-16     H
8  2001-07-17     I
9  2001-12-01     Y
10 2001-12-31     Z

设置为日期时间和groupby月:

df['Date'] = pd.to_datetime(df['Date'])

df.groupby(pd.Grouper(key='Date', freq='m')).count()

输出:

            Title
Date             
2001-05-31      2
2001-06-30      3
2001-07-31      4
2001-08-31      0
2001-09-30      0
2001-10-31      0
2001-11-30      0
2001-12-31      2

要进行绘图,您可以将其用作骨架(我真的不知道您在绘图中寻找的内容):

df['Date'] = pd.to_datetime(df['Date'])
gb = df.groupby(pd.Grouper(key='Date', freq='m')).count()

import matplotlib.pyplot as plt
plt.bar(gb.index, gb.Title)
plt.ylabel('count')
plt.xticks(rotation=90)
plt.tight_layout()

enter image description here

答案 1 :(得分:1)

你说你的DataFrame有一个日期作为索引,我会在那种情况下使用resample

df.index = pd.to_datetime(df.index)
df.resample('M').count()



            Title
Date    
2001-05-31  2
2001-06-30  3
2001-07-31  4
2001-08-31  0
2001-09-30  0
2001-10-31  0
2001-11-30  0
2001-12-31  2

要创建绘图,请使用pandas plot

df.resample('M').count().plot()

enter image description here