假设我有以下 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/