Как применить функцию к каждому из двух столбцов данных pandas и вернуть новый фрейм данных

#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) разными парами, и проблема становится еще более важной для решения.