python - Pandas :删除不构成完整四分之一的观测值

标签 python pandas

假设我有以下 DataFrame,其中包括对系列“X”的每月观察

df = pd.DataFrame({"Date":["201501", "201502", "201503", "201504", "201505", "201506", 
                           "201507", "201508", "201509", "201510", "201511", "201512"],
                           "X":[np.nan, np.nan, 100, 101,102,101, np.nan, 104, 103, 104, 
                                107, 110]}).set_index("Date")

In [32]:df
Out[32]: 
            X
Date         
201501    NaN
201502    NaN
201503  100.0
201504  101.0
201505  102.0
201506  101.0
201507    NaN
201508  104.0
201509  103.0
201510  104.0
201511  107.0
201512  110.0

我需要的是删除不属于整个季度数据的任何月度观察。季度为Q1=M1,M2,M3,Q2=M4,M5,M6,Q3=M7,M8,M9,Q4=M10,M11,M12

在上面的例子中,我需要最终的 DataFrame 是:

In [32]:df
Out[34]: 
             X
Date          
201501     NaN
201502     NaN
201503     NaN
201504   101.0
201505   102.0
201506   101.0
201507     NaN
201508     NaN
201509     NaN
201510   104.0
201511   107.0
201512  110.0

有什么帮助吗?如果缺失的观察结果位于数据框的末端,我已经找到了一种方法来执行我需要的操作,但我一直在研究如何处理中间的缺失值。

最佳答案

您可以重新采样并计算那些不是 NaN 的,并根据该条件进行选择:

df[df.resample('Q').transform('count') == 3]
Out: 
                X
Date             
2015-01-01    NaN
2015-02-01    NaN
2015-03-01    NaN
2015-04-01  101.0
2015-05-01  102.0
2015-06-01  101.0
2015-07-01    NaN
2015-08-01    NaN
2015-09-01    NaN
2015-10-01  104.0
2015-11-01  107.0
2015-12-01  110.0

这假设索引是一个日期时间索引。您可以使用 df.index = pd.to_datetime(df.index, format='%Y%m') 进行转换。

关于python - Pandas :删除不构成完整四分之一的观测值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41187487/

相关文章:

python - Errno 13 - 文档文件夹中的权限被拒绝?

python - 使用数据框分组显示折线图

python - 如何更改 Pandas 查找自己的文件(特别是 parsers.pyx)的位置?

python - 将包含 JSON 对象的数据框扩展为更大的数据框

python - Pandas 的元素不在索引列表中

python - 在 pygame 中实现 Rect 对象和球之间的碰撞检测功能

Python - 按多列索引对列表进行排序

python - 我可以在 PyCharm 中执行 makemigrations 和 migrate 命令吗?

python - 子属性上的 SQLAlchemy 查询过滤器

python - 计算 pandas 数据框中唯一组合的数量