Python - 按月汇总并计算平均值

标签 python date csv pandas aggregate

我有一个看起来像这样的 csv:

Date,Sentiment
2014-01-03,0.4
2014-01-04,-0.03
2014-01-09,0.0
2014-01-10,0.07
2014-01-12,0.0
2014-02-24,0.0
2014-02-25,0.0
2014-02-25,0.0
2014-02-26,0.0
2014-02-28,0.0
2014-03-01,0.1
2014-03-02,-0.5
2014-03-03,0.0
2014-03-08,-0.06
2014-03-11,-0.13
2014-03-22,0.0
2014-03-23,0.33
2014-03-23,0.3
2014-03-25,-0.14
2014-03-28,-0.25
etc

我的目标是按月汇总日期并计算月平均值。日期可能不以 1 或 January 开头。问题是我有很多数据,这意味着我有更多年头。为此,我想找到最快的日期(月份),然后从那里开始计算月份及其平均值。例如:

Month count, average
1, 0.4 (<= the earliest month)
2, -0.3
3, 0.0
...
12, 0.1
13, -0.4 (<= new year but counting of month is continuing)
14, 0.3

我正在使用 Pandas 打开 csv

data = pd.read_csv("pks.csv", sep=",")

所以在 data['Date'] 中我有日期,在 data['Sentiment'] 中我有值。知道怎么做吗?

最佳答案

可能最简单的方法是使用 resample 命令。首先,当您读取数据时,请确保解析日期并将日期列设置为索引(忽略 StringIO 部分和 header=True ...我正在读取您的示例数据多行字符串):

>>> df = pd.read_csv(StringIO(data),header=True,parse_dates=['Date'],
                     index_col='Date')
>>> df

            Sentiment
Date
2014-01-03       0.40
2014-01-04      -0.03
2014-01-09       0.00
2014-01-10       0.07
2014-01-12       0.00
2014-02-24       0.00 
2014-02-25       0.00
2014-02-25       0.00
2014-02-26       0.00
2014-02-28       0.00
2014-03-01       0.10
2014-03-02      -0.50
2014-03-03       0.00
2014-03-08      -0.06
2014-03-11      -0.13
2014-03-22       0.00
2014-03-23       0.33
2014-03-23       0.30
2014-03-25      -0.14
2014-03-28      -0.25


>>> df.resample('M').mean()

            Sentiment
2014-01-31      0.088
2014-02-28      0.000
2014-03-31     -0.035

如果你想要一个月份计数器,你可以在你的resample之后添加它:

>>> agg = df.resample('M',how='mean')
>>> agg['cnt'] = range(len(agg))
>>> agg

            Sentiment  cnt
2014-01-31      0.088    0
2014-02-28      0.000    1
2014-03-31     -0.035    2

您还可以使用 groupby 方法和 TimeGrouper 函数(按月分组,然后调用 groupby< 提供的平均便捷方法)/)。

>>> df.groupby(pd.TimeGrouper(freq='M')).mean()

            Sentiment
2014-01-31      0.088
2014-02-28      0.000
2014-03-31     -0.035

关于Python - 按月汇总并计算平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23859840/

相关文章:

java - 如何以jsp页面的spring形式获取当前日期

javascript - 从日期正则表达式中提取月、日和年

javascript - 带 for 循环的日期数组

Python-从csv文件中消除正则表达式匹配

python - 单元测试设计和模拟

python - 为什么使用 'eval' 是一种不好的做法?

python - 如何将for循环的内容保存到python中的文本文件中

python - 射线线程安全吗?

php - 使用导入上传 CSV 文件时,仅导入 1 条记录

r - 如何编写R来循环设置目录中每个文件的每个工作表