gpt4 book ai didi

python - 基于 DataFrame 将参数传递给 stats.friedmanchisquare 的正确方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 21:08:32 25 4
gpt4 key购买 nike

我正在尝试将值从数据帧 df 传递到 stats.friedmanchisquare,其形状为 (11,17)

这就是对我有效的方法(在此示例中仅适用于三行):

df = df.as_matrix()
print stats.friedmanchisquare(df[1, :], df[2, :], df[3, :])

产生

(16.714285714285694, 0.00023471398805908193)

但是,当我想使用 df 的所有 11 行时,代码行太长了。

首先,我尝试通过以下方式传递值:

df = df.as_matrix()
print stats.friedmanchisquare([df[x, :] for x in np.arange(df.shape[0])])

但我得到:

ValueError: 
Less than 3 levels. Friedman test not appropriate.

其次,我也尝试过不将其转换为矩阵形式,而是将其保留为 DataFrame(这对我来说是理想的),但我想这还不受支持,或者我正在做错了:

print stats.friedmanchisquare([row for index, row in df.iterrows()])

这也给我错误:

ValueError: 
Less than 3 levels. Friedman test not appropriate.

所以,我的问题是:根据df,向stats.friedmanchisquare传递参数的正确方法是什么? (甚至使用它的 df.as_matrix() 表示)

您可以以 csv 格式 here 下载我的数据框并使用以下方式阅读:

df = pd.read_csv('df.csv', header=0, index_col=0)

谢谢你的帮助:)

解决方案:

根据@Ami Tavory 和@vicg 的回答(请为他们投票),基于数据的矩阵表示,我的问题的解决方案是添加 *-operator defined here ,但是 better explained here ,如下所示:

df = df.as_matrix()
print stats.friedmanchisquare(*[df[x, :] for x in np.arange(df.shape[0])])

如果你想使用原始数据框也是如此,这正是我理想中想要的:

print stats.friedmanchisquare(*[row for index, row in df.iterrows()])

通过这种方式,您可以迭代原始格式的数据框。

请注意,我继续运行了一些 timeit 测试以查看哪种方式更快,结果证明,首先将其转换为 numpy 数组 比使用原始数据帧格式的 df 快一倍

这是我的实验设置:

import timeit

setup = '''
import pandas as pd
import scipy.stats as stats
import numpy as np
df = pd.read_csv('df.csv', header=0, index_col=0)
'''

theCommand = '''
df = np.array(df)
stats.friedmanchisquare(*[df[x, :] for x in np.arange(df.shape[0])])
'''

print min(timeit.Timer(stmt=theCommand, setup=setup).repeat(10, 10000))

theCommand = '''
stats.friedmanchisquare(*[row for index, row in df.iterrows()])
'''

print min(timeit.Timer(stmt=theCommand, setup=setup).repeat(10, 10000))

产生以下结果:

4.97029900551
8.7627799511

最佳答案

我在您的第一次尝试中看到的问题是您最终传递了一个包含多个数据框的列表。

stats.friedmanchisquare 需要多个 array_like 参数,而不是一个列表

尝试使用 * (star/unpack)运算符解压列表

像这样

df = df.as_matrix()
print stats.friedmanchisquare(*[df[x, :] for x in np.arange(df.shape[0])])

关于python - 基于 DataFrame 将参数传递给 stats.friedmanchisquare 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31195941/

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