Я исследовал предыдущие похожие вопросы , но не смог найти подходящих потенциальных клиентов:
У меня есть фрейм данных, называемый "df", который примерно структурирован следующим образом:
Income Income_Quantile Score_1 Score_2 Score_3
0 100000 5 75 75 100
1 97500 5 80 76 94
2 80000 5 79 99 83
3 79000 5 88 78 91
4 70000 4 55 77 80
5 66348 4 65 63 57
6 67931 4 60 65 57
7 69232 4 65 59 62
8 67948 4 64 64 60
9 50000 3 66 50 60
10 49593 3 58 51 50
11 49588 3 58 54 50
12 48995 3 59 59 60
13 35000 2 61 50 53
14 30000 2 66 35 77
15 12000 1 22 60 30
16 10000 1 15 45 12
Используя столбец «Income_Quantile» и последующее «for-l oop», я разделил фрейм данных на список из 5 поднаборов фреймов данных (каждый из которых содержит наблюдения из одного и того же квантиля дохода):
dfs = []
for level in df.Income_Quantile.unique():
df_temp = df.loc[df.Income_Quantile == level]
dfs.append(df_temp)
Теперь я хотел бы применить следующую функцию для вычисления корреляции Спирмена, p-значения и t-statisti c к кадру данных (функции fyi: scipy.stats используются в основной функции) :
def create_list_of_scores(df):
df_result = pd.DataFrame(columns=cols)
df_result.loc['t-statistic'] = [ttest_ind(df['Income'], df[x])[0] for x in cols]
df_result.loc['p-value'] = [ttest_ind(df['Income'], df[x])[1] for x in cols]
df_result.loc['correlation'] = [spearmanr(df['Income'], df[x])[1] for x in cols]
return df_result
Функции, которые использует "create_list_of_scores", то есть "ttest_ind" и "ttest_ind", доступны из scipy.stats следующим образом:
- из scipy.stats import ttest_ind
- из scipy.stats import spearmanr
Я протестировал функцию на одном подмножестве фрейма данных:
data = dfs[1]
result = create_list_of_scores(data)
Работает, как и ожидалось.
Однако, когда я Пришло время применить эту функцию ко всему списку данных всего , "dfs", возникает много проблем. Если я применю его к списку фреймов данных следующим образом:
result = pd.concat([create_list_of_scores(d) for d in dfs], axis=1)
Я получу вывод в виде столбцов «Score_1, Score_2 и Score_3» x 5.
Я хотел бы:
- Всего три столбца: "Score_1, Score_2 и Score_3".
- Индексируйте выходные данные, используя t-statisti c, p-значение и корреляции в качестве индекса первого уровня. , а также; «Income_Quantile» как индекс второго уровня.
Вот что я имею в виду:
Score_1 Score_2 Score_3
t-statistic 1
2
3
4
5
p-value 1
2
3
4
5
correlation 1
2
3
4
5
Любая идея о том, как я могу объединить вывод своей функции в соответствии с запросом