获取每个月的平均输入时间与日期时间在熊猫中

时间:2019-05-29 09:34:57

标签: python pandas

我有一个大型df,每月都有很多条目。我想查看每月的平均条目,以查看是否有任何月份通常具有更多条目的示例为例。 (理想情况下,我想用所有均值的一条线作图,以进行比较,但这也许是以后的问题)。 我的df是这样的:

ufo=pd.read_csv('https://raw.githubusercontent.com/justmarkham/pandas-videos/master/data/ufo.csv')
ufo['Time']=pd.to_datetime(ufo.Time)

头部如下所示: enter image description here

因此,如果我想看看夏天是否有更多不明飞行物瞄准,我该怎么办?

我尝试过:

ufo.groupby(ufo.Time.month).mean()

但是它仅在我计算数值时才有效。如果我使用count()而不是所有月份的所有条目的总和。

编辑:为澄清起见,我希望每月输入条目-ufo-sightings。

4 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

# count the total months in the records
def total_month(x):
    return x.max().year -x.min().year + 1

new_df = ufo.groupby(ufo.Time.dt.month).Time.agg(['size', total_month])

new_df['mean_count'] = new_df['size'] /new_df['total_month']

输出:

    size    total_month     mean_count
Time            
1   862     57              15.122807
2   817     70              11.671429
3   1096    55              19.927273
4   1045    68              15.367647
5   1168    53              22.037736
6   3059    71              43.084507
7   2345    65              36.076923
8   1948    64              30.437500
9   1635    67              24.402985
10  1723    65              26.507692
11  1509    50              30.180000
12  1034    56              18.464286

答案 1 :(得分:1)

我认为这是您要寻找的东西,如果我没有达到您要寻找的东西,请仍然要求澄清。

# Add a new column instance, this adds a value to each instance of ufo sighting
ufo['instance'] = 1

# set index to time, this makes df a time series df and then you can apply pandas time series functions.  
ufo.set_index(ufo['Time'], drop=True, inplace=True)   

# create another df by resampling the original df and counting the instance column by Month ('M' is resample by month)
ufo2 = pd.DataFrame(ufo['instance'].resample('M').count())

# just to find month of resampled observation
ufo2['Time'] = pd.to_datetime(ufo2.index.values)

ufo2['month'] = ufo2['Time'].apply(lambda x: x.month)

最后您可以按月分组:)

ufo2.groupby(by='month').mean()

这是看起来像这样的输出:

month   mean_instance
1       12.314286
2       11.671429
3       15.657143
4       14.928571
5       16.685714
6       43.084507
7       33.028169
8       27.436620
9       23.028169
10      24.267606
11      21.253521
12      14.563380

答案 2 :(得分:0)

您是说要按月对数据进行分组吗?我想我们可以做到

ufo['month'] = ufo['Time'].apply(lambda t: t.month)
ufo['year'] = ufo['Time'].apply(lambda t: t.year)

通过这种方式,您将具有“年”和“月”来对数据进行分组。

ufo_2 = ufo.groupby(['year', 'month'])['place_holder'].mean()

答案 3 :(得分:0)

这是您的方法:

ufo=pd.read_csv('https://raw.githubusercontent.com/justmarkham/pandas-videos/master/data/ufo.csv')

ufo['Month'] = [date.split("/")[0] for date in ufo['Time']]
ufo['Time']=pd.to_datetime(ufo.Time)

ufo.groupby(ufo.Month)['Time'].size()

出:

Month
2      817
1      862
12    1034
4     1045
3     1096
5     1168
11    1509
9     1635
10    1723
8     1948
7     2345
6     3059