我需要计算大型水文数据集的Mann Kendall(4381个子流域的最大流量值)。每个子流域有70个最大值。我需要显著性水平0.1,而不是默认值0.05。
以下是我的数据:
"sub" "max"
1 2.195
1 3.753
1 2.941
1 2.152
1 3.363
... ...
4381 0.532
4381 1.108
4381 0.977
4381 0.483
4381 0.435
这是我的剧本:
import pymannkendall as mk
import pandas as pd
from tqdm import tqdm
# naming input and output
in_fname = 'noyear.csv'
out_fname = 'mannkendall3.csv'
# reading csv file
print("reading from file...")
raw = pd.read_csv(in_fname, sep=';', header=0)
# naming columns and converting to strings
sub = raw['sub']
max = raw['max']
raw['sub'] = raw['sub'].astype(str)
# creating DataFrame
out_tbl = pd.DataFrame(data={'sub': sub, 'max': max})
# applying MK
df_mk=out_tbl.groupby(sub)['max'].agg(mk.original_test(alpha =0.1)).reset_index()
# creating csv with output
df_mk.to_csv(out_fname, index=False, sep=';')
执行此操作时,我收到以下错误:
Traceback (most recent call last):
File "/Users/user/Desktop/PyCharmProject/mann-kendall3.py", line 24, in <module>
df_mk=out_tbl.groupby(sub)['max'].agg(mk.original_test(alpha = 0.1)).reset_index()
TypeError: original_test() missing 1 required positional argument: 'x_old'
什么是x_old,在这种情况下它应该去哪里?我是一个初学者,所以任何提示都将不胜感激!
1条答案
按热度按时间bxpogfeg1#
我想我们讨论的是pyMannKendall, version 1.4.2
在
original_test
的文档行和实际代码中有一点小小的差异,在help(mk.original_test)
返回的描述中,我们可以看到x
是一个输入参数:但是函数的签名是
def original_test(x_old, alpha = 0.05)
(参见github上的代码)。这里x_old
是输入向量,在doc中被称为x
。这个参数是必需的,在调用函数时不能省略。因此,应用Mann Kendall测试的行可能需要如下更新:或者,我们可以使用
partial
生成一个新函数,该函数将一个向量作为单个参数: