【问题标题】:How to apply custom function to a text column with a rolling window in pandas?如何将自定义函数应用于熊猫中带有滚动窗口的文本列?
【发布时间】:2021-07-21 08:52:35
【问题描述】:

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

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

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

【问题讨论】:

  • 滚动在非数字列上不受支持。这里的目标是什么?

标签: python pandas dataframe apply rolling-computation


【解决方案1】:

我们可以模拟滚动函数如下(其中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'

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

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

【讨论】:

    猜你喜欢
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2019-09-11
    • 2021-05-26
    • 2017-03-30
    • 1970-01-01
    相关资源
    最近更新 更多