Как игнорировать NaN в кадре данных для теста Манна-Уитни? - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть кадр данных, как показано ниже.

enter image description here

Я хочу получить p-значение критерия Манна-Уитни, сравнивая каждый столбец.В качестве примера я попробовал ниже.

from scipy.stats import mannwhitneyu
mannwhitneyu(df['A'], df['B'])

Это приводит к следующим значениям.

MannwhitneyuResult(statistic=3.5, pvalue=1.8224273379076809e-05)

Мне было интересно, повлияло ли NaN на результат, таким образомЯ сделал следующие df2 и df3 кадры данных, как описано на рисунке, и попробовал ниже.

mannwhitneyu(df2, df3)

Это привело к

MannwhitneyuResult(statistic=3.5, pvalue=0.00025322465545184154)

Итак, ядумаю, что NaN значения повлияли на результат.Кто-нибудь знает, как игнорировать NaN значения в кадре данных?

enter image description here

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Как вы можете видеть, в функции mannwhitneyu нет аргумента, позволяющего вам указать его поведение при обнаружении NaN значений, но если вы проверите его исходный код , вы увидите, чтоон не учитывает NaN значений при расчете некоторых ключевых значений (n1, n2, ranked и т. д.).Это делает меня подозрительным к любым результатам, которые вы получите, если некоторые из входных значений отсутствуют.Если вам не хочется реализовывать функцию самостоятельно с возможностями NaN -игнорирования, вероятно, лучше всего либо создать новые массивы без пропущенных значений, как вы это сделали, либо использовать df['A'].dropna(), как предложено в другомответить.

0 голосов
/ 11 сентября 2018

вы можете использовать df.dropna() вы можете найти обширную документацию здесь dropna

Согласно вашему примеру, синтаксис будет выглядеть примерно так:

mannwhitneyu(df['A'].dropna(),df['B'])
...