熊猫通过数据框过滤并计算统计信息

时间:2020-08-06 06:09:54

标签: python-3.x pandas

我正在尝试访问某些类别的数据并进行统计计算。

            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

我缺少的是可以选择在Type列中选择特定类型,并且仍然产生与stat函数相同的结果。谁能给出提示?

1 个答案:

答案 0 :(得分:2)

您只需要为Type列做一些boolean indexing with .loc

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_inputfoo

,则按行过滤将是这样的
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