python - 如何将自定义函数应用到 pandas 中带有滚动窗口的文本列?

标签 python pandas dataframe apply rolling-computation

我有以下函数,它将一些字符串添加到数组的最后一项并返回一个数字:

def mycoolfunct(v):
    last_bin = v[-1]
    
    sval2 = last_bin[-1] + 'xx'
    sval1 = last_bin[-2] + last_bin[-1] + 'n'
    
    v += [sval1, sval2]
    
    return mycoolcalc(v) # returns a number like 0.2

我通过这种方式手动调用它,它按预期工作:

print(mycoolfunct(['axx', 'are']))
0.35

但是,如果我尝试使用 pandas 中的滚动窗口执行此函数:

df = pd.DataFrame(['are', 'axe', 'are', 'fer'])
print(df[0].rolling(2).apply(mycoolfunct))

我收到以下错误:

DataError: No numeric types to aggregate

如何调用带有滚动窗口的函数并传递文本列而不是数字列?

最佳答案

我们可以如下模拟滚动函数(其中n-1是窗口参数):

n = 3
pd.concat( [df[['col1']].shift(x) for x in range(0,n)], axis=1 )

现在你有了一个像这样的 DataFrame

        col1 col1(lag1) col1(lag2)
         'a'      NaN      NaN
         'b'      'a'      Nan
         'c'      'b'      'a'

这样,您就可以沿 axis=1 应用您选择的函数。

pd.concat( [df[['col1']].shift(x) for x in range(0,n)], axis=1 ).apply(your_function, axis=1)

关于python - 如何将自定义函数应用到 pandas 中带有滚动窗口的文本列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67292774/

相关文章:

python - Matplotlib:取消matplotlib 2.0引入的坐标轴偏移

python - 如何计算多个数据帧之间的重叠行?

python - pandas groupby 跨列聚合数据

python - Pandas 将不同长度的列表分解成行

python - 如何将第一列的值附加到 Pandas 数据框中的所有其他列

python - IDL 和 Python 之间的 FFT 差异

python - 如何在本地机器上使用命令执行远程python以在远程机器上打开网页

python - 正则表达式匹配到以 `- [` 开头的最后一行

python - 计算 Pandas 组中满足特定条件的行数

python - 从 Pandas MultiIndex 中的列进行条件切片