Я работаю с dataframe для проведения теста на Python.
Group Count
B 21
B 13
A 25
A 75
A 11
B 15
Пока это только для одного раздела или категории как такового, тест в порядке:
import pandas as pd
import scipy.stats as stats
valuespergroup = [col for col_name, col in df.groupby('Group')['Count']]
stats.ranksums(*valuespergroup)
Теперь рассмотрим следующее:
Category Group Count
S1 P 21
S1 P 13
S1 A 25
S1 A 75
S1 A 10
S1 P 10
S2 P 21
S2 P 14
S2 A 29
S2 A 95
S2 A 15
S2 P 18
Мне нужно обработать по категориям, то есть сначала передать данные для S1, затем S2 и т.д. Я попытался поместить категорию в группу, но это не сработает. Функция принимает только два аргумента.
Обновления: я пробовал следующие коды, но он будет печатать целые данные для каждой категории, и я не думаю, что он был правильно передан в тест. Это по строкам, которые я хочу сделать. Конечный результат должен быть: Результаты теста S1 Результаты теста S2
groupby_Category = df.groupby('Category')
for Category in groupby_Category:
values_per_group = [col for col_name, col in df3.groupby(['Group'])['Count']]
print(Category, stats.ranksums(*values_per_group))
Ваша рабочая попытка должна работать. Однако вы используете неизвестный df3. Просто замените это фактическим фреймворком данных из итерации объекта groupby, sub_df. Фактически, расширьте свой цикл, чтобы построить dataframe результатов из списка словарей.
groupby_Category = df.groupby('Category')
data_list = []
for i, sub_df in groupby_Category:
values_per_group = [col for col_name, col in sub_df.groupby(['Group'])['Count']]
res = stats.ranksums(*values_per_group)
print(i, res)
# S1 RanksumsResult(statistic=0.8728715609439696, pvalue=0.38273308888522595)
# S2 RanksumsResult(statistic=1.091089451179962, pvalue=0.27523352407483426)
data_list.append({'Category': i, 'statistic': res[0], 'p_value': res[1]})
ranksums_df = pd.DataFrame(data_list)
print(ranksums_df)
# Category p_value statistic
# 0 S1 0.382733 0.872872
# 1 S2 0.275234 1.091089
Похоже, вам нужна groupby
'Group','Category'
for x , y in df.groupby(['Group','Category'])['Count']:
print(x,y)
('A', 'S1') 2 25
3 75
4 10
Name: Count, dtype: int64
('A', 'S2') 8 29
9 95
10 15
Name: Count, dtype: int64
('P', 'S1') 0 21
1 13
5 10
Name: Count, dtype: int64
('P', 'S2') 6 21
7 14
11 18
Name: Count, dtype: int64