使用scipy和groupby计算Kendall的tau

时间:2015-03-10 21:28:43

标签: python pandas dataframe scipy statistics

我有一个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值。所以对于上面我想要和站号210018和215400之间的总和和年份之间的相关性。

station_id 210018的相关性则为-.20,p值为0.62,而station_id 215400相关性为.40,p值为.33。

我正在尝试使用它:

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

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

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:6)

计算此问题的一种方法是在apply对象上使用groupby

>>> 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