gpt4 book ai didi

python - pandas 滚动应用于自定义函数

转载 作者:行者123 更新时间:2023-12-01 06:37:06 25 4
gpt4 key购买 nike

我想滚动应用 pandas.rank。我尝试使用 pandas.rolling.apply 但不幸的是滚动不适用于“排名”。

有办法吗?

df = pd.DataFrame(np.random.randn(10, 3))

def my_rank(x):
return x.rank(pct=True)

df.rolling(3).apply(my_rank)

最佳答案

代码:

def my_rank(x):
return pd.Series(x).rank(pct=True).iloc[-1]

df.rolling(3).apply(my_rank)

输出:

          0         1         2
0 NaN NaN NaN
1 NaN NaN NaN
2 0.666667 0.333333 0.666667
3 1.000000 0.333333 1.000000
4 0.666667 1.000000 0.333333
5 0.333333 0.666667 0.666667
6 1.000000 0.333333 0.666667
7 0.333333 0.333333 1.000000
8 1.000000 0.666667 1.000000
9 0.666667 1.000000 0.666667

说明:

您的代码(顺便说一句,很棒的最小可复制示例!)引发了以下错误: AttributeError: 'numpy.ndarray' object has no attribute 'rank' 。这意味着 x在你的my_rank函数作为 numpy 数组而不是 pandas 系列传递。所以首先我更新了return x.rank...return pd.Series(x).rank..

然后我收到以下错误: TypeError: cannot convert the series to <class 'float'>这是有道理的,因为 pd.Series.rank接受一系列 n 个数字并返回一系列(排序的)n 个数字。但由于我们不是在一个系列上调用一次rank,而是在一个系列的滚动窗口上重复调用rank,所以我们只需要一个数字作为每个滚动计算的输出。因此iloc[-1]

关于python - pandas 滚动应用于自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59615033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com