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 函数相同的结果。任何人都可以给出提示吗?
解决方案
您只需要对列进行一些布尔索引.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
推荐阅读
- python - 在 cvxpy 中指定约束时违反了 DCP 要求,可能需要重新考虑问题的整个表述
- android - Kotlin:为什么转换为字符串后 ByteArray 的大小不同?
- if-statement - 纯 Prolog Peano List 交集
- .net-core - 在代理上使用什么 .Net Core 版本
- reactjs - Redux-Saga 不使用 redux-saga-firebase 等待操作完成
- reactjs - 在自定义输入字段 React-Final-Form-Arrays 上键入时失去焦点
- bash - 为什么我的递归 for 循环不断重复列表中的第一项?
- scala - 读取最后一个增量分区而不读取所有增量
- python - Python嵌套字典不断写所有的kay值
- javascript - 有没有办法从执行函数的范围中获取变量?