我看到了有关创建递归和的帖子 recursive cumulative sums 我修改了它以添加一个衰减“因子”
def rec(n, factor):
if len(n) < 2: return n
n[1] = factor*n[0] + n[1]
return [n[0]] + rec(n[1:], factor)
print(rec([1,2,3,4], 0.5))
#[1, 2.5, 4.25, 6.125]
该功能适用于列表。我想将其更改为用于熊猫系列。因此,我可以使用“转换”为每个“ ID”组申请一个DataFrame。如下所示:
import pandas as pd
df_dic = {'ID': [1,1,1,1,2,2,2],
'channel': [1,2,3,4,3,2,4]}
df = pd.DataFrame.from_dict(df_dic)
output = df.groupby(['ID'])['channel'].transform(rec, 0.5)
为此,我想我需要将功能修改为使用pandas系列而不是list。有没有简单的方法可以做到这一点?
答案 0 :(得分:0)
在这种情况下,您可以将Series转换为list,例如:
def rec(n, factor):
if (type(n) != list): n = list(n) # <---- here it is
if len(n) < 2: return n
n[1] = factor*n[0] + n[1]
return [n[0]] + rec(n[1:], factor)
print(rec([1,2,3,4], 0.5))
#[1, 2.5, 4.25, 6.125]
import pandas as pd
df_dic = {'ID': [1,1,1,1,2,2,2],
'channel': [1,2,3,4,3,2,4]}
df = pd.DataFrame.from_dict(df_dic)
output = df.groupby(['ID'])['channel'].transform(rec, 0.5)
Out[1]:
0 1.000
1 2.500
2 4.250
3 6.125
4 3.000
5 3.500
6 5.750