是否有一个ewm和滚动方法的参数没有填写NA?
template<typename T>
struct UniquePtrInserter : std::iterator<
std::forward_iterator_tag,
std::unique_ptr<T>,
std::ptrdiff_t,
const std::unique_ptr<T>*,
std::unique_ptr<T>>{
int n_;
public:
explicit UniquePtrInserter<T>(int n = 0) : n_(n) {}
UniquePtrInserter<T>& operator++() {n_++; return *this;}
bool operator==(UniquePtrInserter<T> other) const {return n_ == other.n_;}
bool operator!=(UniquePtrInserter<T> other) const {return !(*this == other);}
std::unique_ptr<T> operator*() const {return std::make_unique<T>(); }
};
vec.insert(vec.begin(), UniquePtrInserter<int>(0), UniquePtrInserter<int>(3));
当然,这可以通过
轻松解决>>> A = pd.Series([1,2,3,4,np.nan,5,6])
>>> A
0 1.0
1 2.0
2 3.0
3 4.0
4 NaN
5 5.0
6 6.0
dtype: float64
>>> eA = A.ewm(alpha = 0.5, ignore_na=True).mean()
>>> eA
0 1.000000
1 1.666667
2 2.428571
3 3.266667
4 3.266667 # I want this to be NA, don't fill in
5 4.161290
6 5.095238
dtype: float64
但是这需要一些不必要的运行时间,并且当你有多个滚动函数时,需要考虑每个滚动函数的变量名称是很麻烦的。
答案 0 :(得分:1)
不幸的是,ewm
目前不支持此功能,您必须使用提议的方法覆盖NaN
或过滤NaN
行,以便ewm
生成保留原始索引的Series
,然后您可以使用combine_first
或reindex
重新插入NaN
行:
In [32]:
A = pd.Series([1,2,3,4,np.nan,5,6])
eA = A[A.notnull()].ewm(alpha = 0.5, ignore_na=True).mean()
eA.combine_first(A)
Out[32]:
0 1.000000
1 1.666667
2 2.428571
3 3.266667
4 NaN
5 4.161290
6 5.095238
dtype: float64
In [33]:
eA.reindex(A.index)
Out[33]:
0 1.000000
1 1.666667
2 2.428571
3 3.266667
4 NaN
5 4.161290
6 5.095238
dtype: float64