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

Posted

技术标签:

【中文标题】如何在Python中按十年计算列的平均值【英文标题】:How to calculate the mean of a column by decade in Python 【发布时间】:2017-05-25 20:42:30 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

我认为您需要 groupby 的第一个 3 第一列的字符 str[:3]mean

df = df['Mkt-RF'].groupby(df['Unnamed:0'].str[:3]).mean()

示例:

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

另一种解决方案是先将to_datetimegroupby 转换为year floor 除以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() 或第二种解决方案。 还有一个小建议——*** 的人讨厌图片而不是文字,因为文字无法复制。所以你得到了downvote(s)。这个answers 也可以帮助创建漂亮的熊猫问题。 谢谢!第二种解决方案完美运行。有什么方法可以添加每十年的标准差列? 是的,你可以使用df = df['Mkt-RF'].groupby(df.YEARMONTH.dt.year // 10).agg(['mean', 'std']).add_prefix('_').reset_index()

以上是关于如何在Python中按十年计算列的平均值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 sql 中的 2 个表中按组聚合和计算平均值?

在oracle中按要求统计行数,怎么运用sum和count函数?

在python中按时间分组和绘制数据

如何计算 SQL Server 中按日期和用户分组的条目之间的平均时间?

怎么在SQLServer计算列和平均值

如何计算两列的平均值?微软访问