У меня есть этот кадр данных pandas, содержащий две выборки X и Y для каждой строки:
import pandas as pd
import numpy as np
df = pd.DataFrame({'X': [np.random.normal(0, 1, 10),
np.random.normal(0, 1, 10),
np.random.normal(0, 1, 10)],
'Y': [np.random.normal(0, 1, 10),
np.random.normal(0, 1, 10),
np.random.normal(0, 1, 10)]})
Я хочу использовать функцию ttest_ind()
(статистический тест, берущий две выборки в качестве входных данных) для каждой строки,и взять первый элемент ответа (функция возвращает два элемента):
Если я делаю это для заданной строки, например, 1-й строки, она работает:
from scipy import stats
stats.ttest_ind(df['X'][0], df['Y'][0], equal_var = False)[0]
# Returns a float
Однако, если я использую команду apply для каждой строки, я получаю сообщение об ошибке:
df.apply(lambda x: stats.ttest_ind(x['X'], x['Y'], equal_var = False)[0])
# Throws the following error:
Traceback (most recent call last):
File "pandas\_libs\index.pyx", line 154, in
pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\hashtable_class_helper.pxi", line 759, in
pandas._libs.hashtable.Int64HashTable.get_item
TypeError: an integer is required
During handling of the above exception, another exception occurred:
...
KeyError: ('X', 'occurred at index X')
Что я делаю не так?