如何每9年获得一组的平均值

时间:2017-03-12 19:32:53

标签: pandas average pandas-groupby

我有一个名为EPI的数据框。 它看起来像这样:

enter image description here

它有104个国家。每个国家都有从1991年到2008年(18年)的价值。 我想平均每9年一次。因此,每个国家将有2个平均值。

编辑: 这是我用来获得平均值的命令。但它给了我一个每个国家的价值(平均值)。

<div class="example">
  <h1>This is example datepicker</h1>
 <input type="text"  placeholder="Chekin" id="checkin">
</div>

<div class="project">
  <h1>And this is the project monthPicker</h1>
  <input type="text" id="noIconDemo" />
</div>

但我需要得到一个国家每9年的平均值。

请注意我是r的新用户,我在软件包安装中找不到pandas!

1 个答案:

答案 0 :(得分:0)

我认为您可以先将年份转换为日期时间,然后将groupby转换为resample mean。最后转换为year s。

#sample data for testing
np.random.seed(100)
start = pd.to_datetime('1991-02-24')
rng = pd.date_range(start, periods=36, freq='A')

df = pd.DataFrame({'cname': ['Albania'] * 18 + ['Argentina'] * 18, 
                   'year': rng.year, 
                    'rgdpna.pop': np.random.choice([0,1,2], size=36)})  
#print (df)

df.year = pd.to_datetime(df.year, format='%Y')
df1 = df.set_index('year').groupby('cname').resample('9A',closed='left').mean().reset_index()
df1.year = df1.year.dt.year
print (df1)
       cname  year  rgdpna.pop
0    Albania  1999    1.000000
1    Albania  2008    1.000000
2  Argentina  2017    0.888889
3  Argentina  2026    0.888889