我有以下函数,它将一些字符串添加到数组的最后一项并返回一个数字:
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/