gpt4 book ai didi

python - pandas:给出任意数量的列值作为函数的输入

转载 作者:行者123 更新时间:2023-12-01 00:35:40 24 4
gpt4 key购买 nike

我有一个函数可以根据事件的转移矩阵计算马尔可夫概率。我使用 *args 来创建它,这样我就可以向它提供任意数量的事件:

def get_prob(*args):
ret = 1
for i, j in zip(args, args[1:]):
ret *= probs.at[i,j] # probs is the dataframe of probabilities

return ret

要使用 get_prob,我需要在单括号中给出事件名称并用逗号分隔:

get_prob('RegainStart','RegainReady','Programstopped','RegainStart')
Out[77]: 0.00039915615879420366

Probs 是一个具有事件转换矩阵的数据框,如下所示:

                  RegainStart    RegainReady    ProgramStopped
RegainStart 0.30 0.20 0.10
RegainReady 0.80 0.34 0.20
Program Stopped 0.29 0.45 0.60

在另一个名为 Rules 的数据框中,我使用 C-SPADE 算法发现了一些顺序模式。这些结果存储在此数据框中:

    Sequence             
0 RegainStart,RegainReady,Programstopped,RegainStart
1 RegainStart,RegainReady
2 RegainStart,RegainReady,RegainStart
3 Programstopped,RegainStart

我的问题如下:我想将Rules数据帧每一行的值交给get_prob函数并计算马尔可夫概率。但是,我似乎无法正确输入。我尝试了以下方法来获取第一行的字符串:

list(rules['sequence'].str.split(',', expand=True, n = 1).iloc[0])

Out[70]: ['RegainStart','RegainReady,Programstopped,RegainStart']

它只删除第一个逗号,而不删除第一个逗号之后的其他逗号。此外,它仍然不是 get_prob 函数的正确输入,该函数只需要这些单独的字符串作为输入:

get_prob('RegainStart','RegainReady','Programstopped','RegainStart')

我是否正确地处理了这个问题,或者我是否缺少 pandas/python 的某些函数来提供这些行作为我的函数的输入?

提前致以亲切的问候和感谢!

最佳答案

IIUC,这应该适合你:

probs = df['Sequence'].str.split(',').apply(lambda s: get_prob(*s))

该语句将每个字符串序列拆分为一个列表和 apply每个列表上的 lambda 函数(有关解包参数列表的更多信息,请参阅 doc)。如果将 get_prob 定义更改为 get_prob(args) 以获取字符串列表而不是未知数量的参数,则代码可以简化为

probs = df['Sequence'].str.split(',').apply(get_prob)

应该会快一点。

关于python - pandas:给出任意数量的列值作为函数的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57805293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com