我有一个大型df,每月都有很多条目。我想查看每月的平均条目,以查看是否有任何月份通常具有更多条目的示例为例。 (理想情况下,我想用所有均值的一条线作图,以进行比较,但这也许是以后的问题)。 我的df是这样的:
ufo=pd.read_csv('https://raw.githubusercontent.com/justmarkham/pandas-videos/master/data/ufo.csv')
ufo['Time']=pd.to_datetime(ufo.Time)
因此,如果我想看看夏天是否有更多不明飞行物瞄准,我该怎么办?
我尝试过:
ufo.groupby(ufo.Time.month).mean()
但是它仅在我计算数值时才有效。如果我使用count()
而不是所有月份的所有条目的总和。
编辑:为澄清起见,我希望每月输入条目-ufo-sightings。
答案 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