如何在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_datetime
和groupby
转换为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中按十年计算列的平均值的主要内容,如果未能解决你的问题,请参考以下文章
在oracle中按要求统计行数,怎么运用sum和count函数?