python - Pandas 日期范围重叠聚合
问题描述
我一直在尝试学习如何使用 Pandas,但我完全不知道在 API 中的哪里可以找到可以根据日期范围内的符号有条件地聚合数据的方法。我有一个像这样的数据框:
Date Change
2010-08-25 0.08
2010-08-26 -0.22
2010-08-27 0.04
2010-08-30 -0.08
2010-08-31 -0.11
... ...
2020-08-18 0.96
2020-08-19 -1.79
2020-08-20 5.04
2020-08-21 -0.84
2020-08-24 -1.10
Date 列当然是一个索引。我想做的基本上是按年份划分这些数据。一旦按年份分区,我想通过更改列的符号对连续的行进行分组,以便将连续的负数和连续的正数组合在一起。完成后,我想获得所有年份的日期范围与匹配符号的重叠。例如,如果从 2010-08-25 到 2010-08-27 和从 2011-08-26 到 2011-08-29 的变化是正的,那么常见的重叠将是 08-26 到 08-27,显然占所有年份不只是 2. 在这一点上,一旦我有了共同的日期范围及其值,我想对该范围内的所有数字进行平均,这样最后我就有了变化始终为正或负的日期范围以及平均值每个范围的变化。我怎样才能做到这一点?
解决方案
这是一种方法,IIUC(注释嵌入在下面的代码中):
from io import StringIO
import pandas as pd
data = '''Date Change
2010-08-25 0.08
2010-08-26 -0.22
2010-08-27 0.04
2010-08-30 -0.08
2010-08-31 -0.11
2020-08-18 0.96
2020-08-19 -1.79
2020-08-20 5.04
2020-08-21 -0.84
2020-08-24 -1.10
'''
# create data frame
df = pd.read_csv(StringIO(data), sep='\s+',
engine='python', parse_dates=['Date'],
index_col='Date')
# make a variable to segment positive vs negative changes
df['is_positive'] = (df['Change'] >= 0).astype(int)
# make a variable for the year
df['year'] = df.index.year
# groupby to calculate mean for each (year, is_positive)
# transform() returns same number of rows as original data
# (for illustration purposes)
df['mean_change'] = df.groupby(['year', 'is_positive'])['Change'].transform('mean')
# sort and print
df = df.sort_values(['year', 'is_positive', 'Change'])
print(df)
Change is_positive year mean_change
Date
2010-08-26 -0.22 0 2010 -0.136667
2010-08-31 -0.11 0 2010 -0.136667
2010-08-30 -0.08 0 2010 -0.136667
2010-08-27 0.04 1 2010 0.060000
2010-08-25 0.08 1 2010 0.060000
2020-08-19 -1.79 0 2020 -1.243333
2020-08-24 -1.10 0 2020 -1.243333
2020-08-21 -0.84 0 2020 -1.243333
2020-08-18 0.96 1 2020 3.000000
2020-08-20 5.04 1 2020 3.000000
推荐阅读
- excel - 来自属性的表扬数据
- vue.js - 在 vue 中中断生产模式
- node.js - 使用 package.json 中的 shx 删除和复制文件
- python - 是否有“关联”对称“加密”算法?
- python - Seaborn PairPlot 旋转 x 轴标签。分类数据标签重叠
- material-design - 应用栏在深色主题中不遵循标题 6 文本外观(材料设计组件)
- pydicom - 匿名化后如何以dicom格式保存Dicom图像?
- python - 如何使用python获取浮点数的立方根
- php - Symfony,handleRequest 后某些字段仍为空白
- javascript - 执行 http 请求时出错:未定义:1
Document Moved