Функция работает с каждой строкой фрейма данных, но не использует df.apply - PullRequest
0 голосов
/ 15 мая 2018

У меня есть этот кадр данных 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')
    

Что я делаю не так?

1 Ответ

0 голосов
/ 15 мая 2018

Вам просто нужно указать ось, на которой вы хотите применить свою функцию.Посмотрите на соответствующие документы для apply().Короче говоря, axis = 1 говорит "применить функцию к каждой строке моего фрейма данных".По умолчанию используется значение axis = 0, которое вместо этого пытается применить функцию к каждому столбцу.

df.apply(lambda x: stats.ttest_ind(x['X'], x['Y'], equal_var = False)[0], axis=1)

0    0.985997
1   -0.197396
2    0.034277
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...