如何在scipy中将列表作为多个变量传递?

hgncfbus  于 2022-12-23  发布在  其他
关注(0)|答案(2)|浏览(274)

我是python的新手,我找不到问题的解决方案,因为我甚至不确定我在找什么,或者我应该在google上搜索什么。
我有一个包含30列的 Dataframe ,我想使用scipy. stats. friedmanchisquare进行弗里德曼测试
作为一个参数,我需要所有的样本,这是我的df的列。
我尝试了各种方法,但我想不出来:

scipy.stats.friedmanchisquare(df)
lst_cols = ['col1', 'col2', 'col3',..., 'col30']
scipy.stats.friedmanchisquare(df[lst_cols])
lst_cols = ['col1', 'col2', 'col3',..., 'col30']
samples = []
for i in lst_cols:
    lst = df[i].tolist()
    samples.append(lst)

scipy.stats.friedmanchisquare(samples)

但我总是得到错误:Friedman检验至少需要3组样本,得1
我知道我似乎总是传递一个列表/一个df。我怎么能把列表的元素作为单独的示例使用呢?
问候语

nzrxty8p

nzrxty8p1#

尝试在list之前使用*,它将list扩展为值

lst_cols = ['col1', 'col2', 'col3',..., 'col30']
samples = []
for i in lst_cols:
    lst = df[i].tolist()
    samples.append(lst)

scipy.stats.friedmanchisquare(*samples)

甚至简单

scipy.stats.friedmanchisquare(*df.values)
q9yhzks0

q9yhzks02#

当调用一个接受多个参数的函数时,可以使用列表(或任何序列)作为*运算符的独立参数:

def foo(a, b):
    return a+b
    
l = [1, 2]

# unpacks l i to a and b
foo(*l)

因此,只需在列前面粘贴一个*

scipy.stats.friedmanchisquare(*df[lst_cols])

相关问题