df2 = pd.DataFrame({'date': ['2015-01-01', '2015-01-02', '2015-01-03'],
'value': ['a', 'b', 'a']})
date value
0 2015-01-01 a
1 2015-01-02 b
2 2015-01-03 a
我试图了解如何应用自定义滚动功能。我试过这样做:
df2.rolling(2).apply(lambda x: 1)
但这给了我原来的DataFrame:
date value
0 2015-01-01 a
1 2015-01-02 b
2 2015-01-03 a
这里有一种方法可以解决这个问题。注意到
rolling
是
numpy
方法的包装器以及与这些方法相关的效率,但事实并非如此。这仅仅提供了一个类似的api,允许在非数字列上滚动:
代码:
import pandas as pd
class MyDataFrame(pd.DataFrame):
@property
def _constructor(self):
return MyDataFrame
def rolling_object(self, window, column, default):
return pd.concat(
[self[column].shift(i) for i in range(window)],
axis=1).fillna(default).T