Pandas фильтровать фрейм данных и вычислять статистику - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь получить доступ к определенным категориям данных и выполнить вычисление статистики.

            A         B         C   Type
0    1.539708 -1.166480  0.533026   foo
1    1.302092 -0.505754  0.533026   foo
2   -0.371983  1.104803 -0.651520   bar
3   -1.309622  1.118697 -1.161657   bar
4   -1.924296  0.396437  0.812436   baz

Ожидаемый результат (я оставил данные пустыми ниже, однако фактическая программа будет иметь правильный результат):

user_input = input('Select type: ')  <-----user input foo
   Mean 25% Median
A  
B
C

Пока я могу создать функцию для вычисления среднего, 25% и медианы для всего фрейма данных, используя ниже:

def stat(df):
   mean = df[['A','B','C']].mean()
   quantile = df[['A','B','C']].quantile(0.25)
   median = df[['A','B','C']].median()
   df1 = mean.rename('Mean').to_frame()
   df2 = quantile.rename('25%').to_frame()
   df3 = median.rename('Median').to_frame()
   df = df1.join([df2,df3])
   return df

Мне не хватает есть возможность выбрать конкретный тип в столбце Тип и при этом получить тот же результат, что и функция stat. Может кто подскажет?

1 Ответ

2 голосов
/ 06 августа 2020

Вам просто нужно выполнить некоторую логическую индексацию с .loc для столбца Type:

user_input = input('Select type: ')

def stat(df, Type):
    mean = df.loc[(df['Type'] == Type), ['A','B','C']].mean()
    quantile = df.loc[(df['Type'] == Type), ['A','B','C']].quantile(0.25)
    median = df.loc[(df['Type'] == Type), ['A','B','C']].median()
    df1 = mean.rename('Mean').to_frame()
    df2 = quantile.rename('25%').to_frame()
    df3 = median.rename('Median').to_frame()
    df = df1.join([df2,df3])
    return df

Например, вот как это будет выглядеть, если вы отфильтруете по строкам, если user_input равно foo

stat(df, user_input)

Out[1]: 
       Mean       25%    Median
A  1.420900  1.361496  1.420900
B -0.836117 -1.001298 -0.836117
C  0.533026  0.533026  0.533026
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...