如何在Python中按十年计算列的平均值

如何在Python中按十年计算列的平均值,python,pandas,rows,mean,Python,Pandas,Rows,Mean,我不确定如何计算给定特定行的列的平均值。 我需要按十年计算列Mkt RF的平均值,如193001到193912的平均值,依此类推。在2016年之前,我每十年都要这样做 还有什么方法可以将结果放入自己的新数据帧中?十年(19201930年)在一列中,每个十年的平均值在另一列中?我认为您需要通过第一列3字符通过str[:3]与: 样本: df = pd.DataFrame({'Unnamed:0':['192607','192608','193609','193610','193611'],

我不确定如何计算给定特定行的列的平均值。 我需要按十年计算列Mkt RF的平均值,如193001到193912的平均值,依此类推。在2016年之前,我每十年都要这样做

还有什么方法可以将结果放入自己的新数据帧中?十年(19201930年)在一列中,每个十年的平均值在另一列中?

我认为您需要通过第一列
3
字符通过
str[:3]
与:

样本:

df = pd.DataFrame({'Unnamed:0':['192607','192608','193609','193610','193611'],
                   'Mkt-RF':[4,5,6,7,5]})
print (df)   
   Mkt-RF Unnamed:0
0       4    192607
1       5    192608
2       6    193609
3       7    193610
4       5    193611

#rename column
df = df.rename(columns={'Unnamed:0':'YEARMONTH'})

df = df['Mkt-RF'].groupby(df.YEARMONTH.str[:3]).mean().rename('MEAN').reset_index()
df.YEARMONTH = (df.YEARMONTH + '0').astype(int)
print (df)
   YEARMONTH  MEAN
0       1920   4.5
1       1930   6.0
另一种解决方案是先转换,然后按楼层除以
10

df = df.rename(columns={'Unnamed:0':'YEARMONTH'})

df.YEARMONTH = pd.to_datetime(df.YEARMONTH, format='%Y%m')
df = df['Mkt-RF'].groupby(df.YEARMONTH.dt.year // 10).mean().rename('MEAN').reset_index()
df.YEARMONTH = df.YEARMONTH *10
print (df)
   YEARMONTH  MEAN
0       1920   4.5
1       1930   6.0

它会为我返回这个错误吗?“只能使用带字符串值的.str访问器,该访问器在pandas中使用np.object dtype”不确定它的含义。因为第一列不是字符串。因此,您可以使用
df=df['Mkt-RF'].groupby(df['Unnamed:0'].astype(str).str[:3]).mean()
或第二种解决方案。还有一些小建议,
StackOverflow
的人讨厌图片而不是文本,因为文本无法复制。所以你得到了否决票。此外,这也可以帮助创建好熊猫的问题。谢谢!第二种解决方案非常有效。是否有任何方法可以添加一列,其中包含每个十年的标准偏差?是的,您可以使用
df=df['Mkt-RF'].groupby(df.YEARMONTH.dt.year//10).agg(['mean','std'])。添加前缀(''''')。重置索引()
df = df.rename(columns={'Unnamed:0':'YEARMONTH'})

df.YEARMONTH = pd.to_datetime(df.YEARMONTH, format='%Y%m')
df = df['Mkt-RF'].groupby(df.YEARMONTH.dt.year // 10).mean().rename('MEAN').reset_index()
df.YEARMONTH = df.YEARMONTH *10
print (df)
   YEARMONTH  MEAN
0       1920   4.5
1       1930   6.0