我在使用Pandas的rolling
函数时遇到了问题,我想要对每一行计算组内迄今为止的最大值。以下是一个示例:
df = pd.DataFrame([[1,3], [1,6], [1,3], [2,2], [2,1]], columns=['id', 'value'])
看起来像是
id value
0 1 3
1 1 6
2 1 3
3 2 2
4 2 1
现在我希望获得以下DataFrame:
id value
0 1 3
1 1 6
2 1 6
3 2 2
4 2 2
问题在于当我执行以下操作时:
df.groupby('id')['value'].rolling(1).max()
我得到了相同的DataFrame。当我执行以下操作时:
df.groupby('id')['value'].rolling(3).max()
我得到了一个带有Nan值的DataFrame。能否有人解释一下如何正确使用rolling
或其他Pandas函数来获取我想要的DataFrame?
expanding
:df.groupby('id').expanding().max()
。但是,进行了一些快速测试后发现它比其他两个答案慢。只是为了参考,因为如果需要的话,“扩展”确实会给你比“cummax”更多的选项(如窗口大小等)。 - JohnE