我正在尝试访问某些类别的数据并进行统计计算。
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函数相同的结果。谁能给出提示?
答案 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_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