Я пытаюсь вычислить p-значение и t-значение для различных подсегментов во фрейме данных.
Во фрейме данных есть два столбца, вот пять верхних значений в моем фрейме данных:
df[["Engagement_score", "Performance"]].head()
Engagement_score Performance
0 6 0.0
1 5 0.0
2 7 66.3
3 3 0.0
4 11 0.0
Я группирую свой фрейм данных по показателю вовлеченности, а затем вычисляю эти три статистики для этих групп:
1) Средний балл производительности (sub_average) и количество значений в этой группе (sub_bookings)
2) Средний балл производительности для остальных групп (rest_average) и количество значений в остальных группах (rest_bookings)
Общая оценка производительности и общее количество бронирований рассчитываются для общего фрейма данных.
Вот мой код для этого.
def stats_comparison(i):
df.groupby(i)['Performance'].agg({
'average': 'mean',
'bookings': 'count'
}).reset_index()
cat = df.groupby(i)['Performance']\
.agg({
'sub_average': 'mean',
'sub_bookings': 'count'
}).reset_index()
cat['overall_average'] = df['Performance'].mean()
cat['overall_bookings'] = df['Performance'].count()
cat['rest_bookings'] = cat['overall_bookings'] - cat['sub_bookings']
cat['rest_average'] = (cat['overall_bookings']*cat['overall_average'] \
- cat['sub_bookings']*cat['sub_average'])/cat['rest_bookings']
cat['t_value'] = stats.ttest_ind(cat['sub_average'], cat['rest_average'])[0]
cat['prob'] = stats.ttest_ind(cat['sub_average'], cat['rest_average'])[1] # this is the p value
cat['significant'] = [(lambda x: 1 if x > 0.9 else -1 if x < 0.1 else 0)(i) for i in cat['prob']]
# if the p value is less than 0.1 then I can confidently say that the 2 samples are different.
print(cat)
stats_comparison('Engagement_score')
Я получил следующий вывод, но я получаю одинаковое P-значение и T-значение для моих подсегментов, как мне придумать разные pvalues и t-значения для этих подсегментов без написания цикла:
Engagement_score sub_average sub_bookings overall_average \
0 3 68.493120 1032 69.18413
1 4 71.018214 571 69.18413
2 5 70.265373 670 69.18413
3 6 68.986506 704 69.18413
4 7 69.587893 636 69.18413
5 8 70.215244 656 69.18413
6 9 63.495813 812 69.18413
7 10 71.235994 664 69.18413
8 11 69.302559 508 69.18413
9 12 81.980952 105 69.18413
overall_bookings rest_bookings rest_average t_value prob \
0 6358 5326 69.318025 0.870172 0.395663
1 6358 5787 69.003162 0.870172 0.395663
2 6358 5688 69.056769 0.870172 0.395663
3 6358 5654 69.208737 0.870172 0.395663
4 6358 5722 69.139252 0.870172 0.395663
5 6358 5702 69.065503 0.870172 0.395663
6 6358 5546 70.016967 0.870172 0.395663
7 6358 5694 68.944854 0.870172 0.395663
8 6358 5850 69.173846 0.870172 0.395663
9 6358 6253 68.969247 0.870172 0.395663