#pandas #dataframe
#pandas #фрейм данных
Вопрос:
Например, у меня есть фрейм данных следующим образом:
A | B | C | D | |
---|---|---|---|---|
0 | 1.049380 | 0.512696 | 0.135421 | 1.396424 |
1 | -0.367589 | -0.741008 | -1.543296 | 0.355291 |
2 | 1.244623 | -0.295761 | 1.238826 | -0.017174 |
3 | 0.378124 | 0.870361 | -0.733288 | -0.228948 |
Я хочу вызвать stats.ttest_ind
всю комбинацию из двух столбцов и получить новый фрейм данных следующим образом (не обращайте внимания на фиктивные значения):
A | B | C | D | |
---|---|---|---|---|
A | nan | 0.512696 | 0.135421 | 1.396424 |
B | -0.367589 | nan | -1.543296 | 0.355291 |
C | 1.244623 | -0.295761 | nan | -0.017174 |
D | 0.378124 | 0.870361 | -0.733288 | nan |
Ответ №1:
Вы могли бы использовать понимание списка:
ttest_lists = [[ stats.ttest_ind(df[col_i], df[col_j]) if col_i!=col_j else np.nan
for col_i in df] for col_j in df]
Чтобы получить DataFrame
, а не список списков, вы можете использовать:
ttest_df = pd.DataFrame(ttest_lists, columns=df.columns, index=df.columns)
Комментарии:
1. Кроме того, если вы проводите статистическое тестирование несколько раз, будьте осторожны с учетом p-взлома. Если вы тестируете с уровнем значимости 5%, то с 6 различными парами A, B, C, D вероятность того, что вы ложно отклоните нулевую гипотезу, превысит 5%, потенциально значительно. Если у вас более 4 столбцов, скажем, n, 6 разных пар становятся 0,5 * n * (n-1) разными парами, и проблема становится еще более важной для решения.