Как лучше всего использовать столбцы из одного DataFrame в качестве индексов в другом мультииндексированном DataFrame, используя Pandas для запуска t-теста?
Я видел пару других похожих вопросов, которые включали циклы здесь, которые не кажутся идеальными.
Например, я хотел бы запустить t-тест для групп, указанных в следующем inds
, против групп, не входящих в inds
в dat
DataFrame.
import numpy as np
import pandas as pd
from scipy.stats import ttest_ind
np.random.seed(999)
dat = pd.DataFrame(data={"Group1" : np.random.randint(1, 3, 100),
"Group2" : np.random.randint(1, 5, 100),
"Value" : np.random.normal(size=100)})
dat.set_index(["Group1", "Group2"], inplace=True)
# How to use this as indices into MultiIndex of dat for t-test?
inds = pd.DataFrame(data={"Group1" : np.random.randint(1, 4, 20),
"Group2" : np.random.randint(2, 6, 20)})
# My attempt using joins, seems quite innefficient
inds["ind"] = True
inds.set_index(["Group1", "Group2"], inplace=True)
df = pd.merge(dat, inds, how='outer', left_index=True, right_index=True)
df['ind'].fillna(False, inplace=True)
# run test
tst = ttest_ind(df.loc[df['ind'], 'Value'],
df.loc[~df['ind'], 'Value'], equal_var=False, nan_policy='omit')