如何使用列表到熊猫系列更改用户定义的函数

时间:2019-10-31 16:53:05

标签: python pandas

我看到了有关创建递归和的帖子 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。有没有简单的方法可以做到这一点?

1 个答案:

答案 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