首页 > 解决方案 > 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 函数相同的结果。任何人都可以给出提示吗?

标签: python-3.xpandas

解决方案


您只需要对列进行一些布尔索引.locType

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

推荐阅读