【问题标题】:Run spicy.stats ANOVA test for all unique values in a data frames column?对数据框列中的所有唯一值运行spicy.stats ANOVA 测试?
【发布时间】:2021-07-12 04:30:45
【问题描述】:

我有一个包含许多城市及其相应温度的数据框:

               CurrentThermostatTemp
City                                
Cradley Heath                   20.0
Cradley Heath                   20.0
Cradley Heath                   18.0
Cradley Heath                   15.0
Cradley Heath                   19.0
...                              ...
Walsall                         16.0
Walsall                         22.0
Walsall                         20.0
Walsall                         20.0
Walsall                         20.0

[6249 rows x 1 columns]

唯一值是:

Index(['Cradley Heath', 'ROWLEY REGIS', 'Smethwick', 'Oldbury',
       'West Bromwich', 'Bradford', 'Bournemouth', 'Poole', 'Wareham',
       'Wimborne',
       ...
       'St. Helens', 'Altrincham', 'Runcorn', 'Widnes', 'St Helens',
       'Wakefield', 'Castleford', 'Pontefract', 'Walsall', 'Wednesbury'],
      dtype='object', name='City', length=137)

我的目标是进行单向方差分析,即

from scipy.stats import f_oneway

对于数据框中的所有唯一值。也一样

SciPy.stats.f_oneway("all unique values")

并接收输出:所有变量的单向方差分析给出 {} 和 p 值 {} 这是我尝试过很多次但不起作用的方法:

all = Tempvs.index.unique()
Tempvs.sort_index(inplace=True)
for n in range(len(all)):
    truncated = Tempvs.truncate(all[n], all[n])
    print(f_oneway(truncated))

【问题讨论】:

    标签: python pandas dataframe anova scipy.stats


    【解决方案1】:

    IIUC 您想要一个方差分析测试,其中每个样本包含唯一元素City 的值Temp。如果是这种情况,你可以这样做

    import numpy as np
    import pandas as pd
    import scipy.stats as sps
    
    # I create a sample dataset
    index = ['Cradley Heath', 'ROWLEY REGIS',
             'Smethwick', 'Oldbury',
             'West Bromwich', 'Bradford', 
             'Bournemouth', 'Poole', 'Wareham',
             'Wimborne','St. Helens', 'Altrincham', 
             'Runcorn', 'Widnes', 'St Helens',
             'Wakefield', 'Castleford', 'Pontefract', 
             'Walsall', 'Wednesbury']
    np.random.seed(1)
    df = pd.DataFrame({
        'City': np.random.choice(index, 500),
        'Temp': np.random.uniform(15, 25, 500)
    })
    
    # populate a list with all
    # values of unique Cities
    values = []
    for city in df.City.unique():
        _df = df[df.City==city]
        values.append(_df.Temp.values)
    
    # compute the ANOVA
    # with starred *list
    # as arguments
    sps.f_oneway(*values)
    

    在这种情况下,将给出

    F_onewayResult(statistic=0.4513685152123563, pvalue=0.9788508507035195)
    

    PS:不要使用all作为变量,因为它是python内置函数,见https://docs.python.org/3/library/functions.html#all

    【讨论】:

    • 非常感谢先生。感谢帮助
    • YVW。如果您认为这可以解决您的问题,请接受答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2013-08-20
    • 2023-02-20
    • 2021-06-27
    相关资源
    最近更新 更多