我有一个包含2列的简单DataFrame-日期和值。我需要创建另一个DataFrame,其中包含每年每个月的平均值。例如,我的每日数据范围为2015年1月1日至2018年12月31日 我需要2015年,2016年等每个月的平均值。 哪种方法最简单?
答案 0 :(得分:2)
您可以使用Series.dt.to_period
和mean
按月汇总:
df['date'] = pd.to_datetime(df['date'])
df1 = df.groupby(df['date'].dt.to_period('m'))['col'].mean().reset_index()
另一种在年份和月份分别位于列中的解决方案:
df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df1 = df.groupby(['year','month'])['col'].mean().reset_index()
示例:
df = pd.DataFrame({'date':['2015-01-02','2016-03-02','2015-01-23','2016-01-12','2015-03-02'],
'col':[1,2,5,4,6]})
print (df)
date col
0 2015-01-02 1
1 2016-03-02 2
2 2015-01-23 5
3 2016-01-12 4
4 2015-03-02 6
df['date'] = pd.to_datetime(df['date'])
df1 = df.groupby(df['date'].dt.to_period('m'))['col'].mean().reset_index()
print (df1)
date col
0 2015-01 3
1 2015-03 6
2 2016-01 4
3 2016-03 2
df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df2 = df.groupby(['year','month'])['col'].mean().reset_index()
print (df2)
year month col
0 2015 1 3
1 2015 3 6
2 2016 1 4
3 2016 3 2
答案 1 :(得分:0)
要获取当DataFrame具有每日数据行时该数据框架的每月平均值,我将:
df['dates']
的列转换为DataFrame df
的索引:df.set_index('date',inplace=True)
dates
转换为月索引:df.index.month
df.groupby(df.index.month).data.mean()
我慢慢地把每一步扔到这里:
您需要首先导入Pandas和Numpy以及模块datetime
from datetime import datetime
在2019年1月1日至2019年5月3日之间以“ W”周的间隔生成一列'date'
。还有一列'data'
,其随机值介于1到100之间:
date_rng = pd.date_range(start='1/1/2018', end='3/05/2018', freq='W')
df = pd.DataFrame(date_rng, columns=['date'])
df['data']=np.random.randint(0,100,size=(len(date_rng)))
df
有两列'date'
和'data'
:
date data
0 2018-01-07 42
1 2018-01-14 54
2 2018-01-21 30
3 2018-01-28 43
4 2018-02-04 65
5 2018-02-11 40
6 2018-02-18 3
7 2018-02-25 55
8 2018-03-04 81
'date'
列设置为DataFrame的索引: df.set_index('date',inplace=True)
df
有一列'data'
,索引是'date'
:
data
date
2018-01-07 42
2018-01-14 54
2018-01-21 30
2018-01-28 43
2018-02-04 65
2018-02-11 40
2018-02-18 3
2018-02-25 55
2018-03-04 81
months=df.index.month
monthly_avg=df.groupby(months).data.mean()
'monthly_avg'
划分的数据集的平均值为: date
1 42.25
2 40.75
3 81.00
Name: data, dtype: float64