【问题标题】:Calculating Kendall's tau using scipy and groupby使用 scipy 和 groupby 计算 Kendall 的 tau
【发布时间】:2015-05-12 12:32:55
【问题描述】:

我有一个 csv 文件,其中包含每年和每个气象站的降水数据。它看起来像这样:

station_id    year       Sum
 210018      1916      65.024
 210018      1917      35.941
 210018      1918      28.448
 210018      1919      68.58
 210018      1920      31.115
 215400      1916      44.958
 215400      1917      31.496
 215400      1918      38.989
 215400      1919      74.93
 215400      1920      53.5432

我想根据唯一的站点 ID 返回 Kendall 的 tau 相关性和 p 值。所以对于上面我想要车站 id 210018 和 215400 的总和和年份之间的相关性。

station_id 210018 的相关性为 -.20,p 值为 0.62,station_id 215400 的相关性为 0.40,p 值为 0.33。

我正在尝试使用这个:

grouped=df.groupby(['station_id'])
grouped.aggregate([tau, p_value=sp.stats.kendalltau(df.year, df.Sum)])

返回的错误是 p_value 后等号上的语法错误。

任何帮助将不胜感激。

【问题讨论】:

    标签: python pandas dataframe scipy statistics


    【解决方案1】:

    一种计算方法是在groupby 对象上使用apply

    >>> import scipy.stats as st
    >>> df.groupby(['station_id']).apply(lambda x: st.kendalltau(x['year'], x['Sum']))
    station_id
    210018        (-0.2, 0.62420612399)
    215400        (0.4, 0.327186890661)
    dtype: object
    

    【讨论】:

    • 这比我尝试的要直观得多。不过,我收到了一个属性错误。 “模块”对象没有属性“kendalltau”
    • 我明白了 - 回溯是否表明导致属性错误的原因? (可能其他版本的 Pandas 需要做一些修改)
    • 我让它工作了,只是忽略了我的一些代码。非常感谢!
    • 没问题!很高兴它成功了。 (我刚刚注意到我使用了与您不同的 scipy.stats 别名)
    猜你喜欢
    • 1970-01-01
    • 2015-05-22
    • 2011-02-03
    • 2019-12-10
    • 2023-03-31
    • 2021-10-17
    • 1970-01-01
    • 2018-10-19
    • 2017-01-26
    相关资源
    最近更新 更多