如何在dataframe中使用groupby查找描述性统计信息

2024-09-29 21:59:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,所以,我认为这只是一个基础,但我找不到它。 我有一个由100个问题组成的数据框架

|Date|QID|Time_1|Answer_1|Time_2|Answer_2|Time_3|Answer_3|
|1/12|001|20    |  A     |  30  |   A    |  34  |   D    |
|1/12|001|22    |  A     |  10  |   A    |  12  |   D    |
|1/12|002|27    |  B     |  40  |   A    |  45  |   D    |
|1/12|002|25    |  A     |  60  |   C    |  23  |   D    |

所以,我想要一个时间的描述性统计数据,比如总时间的max,min,mean

在样本数据中,这是输出:

输出

|QID| Mean | Min | Max |
|001| 21.33| 10  |  34 |
|002| 36.67| 23  |  60 |

我该怎么做

我有用

df.mean(axis=1)
df.max(axis=1)
df.min(axis=1)

但是如何在QID的基础上使用group by找到描述性统计

先谢谢你


Tags: 数据answer框架dfdatetime时间min
2条回答

解决方案的主要复杂性是不存在meanmean,因此有必要根据定义创建mean——它是sum的和除以count的和

因此,首先使用^{}获得每行的聚合,而不是mean使用sum^{},然后聚合summinmax,最后为mean划分列:

cols = df.filter(like='Time').columns

df1 = df[cols].agg(['sum','size','min','max'], axis=1)
df = df1.groupby(df['QID']).agg(m1=('sum','sum'),
                                m2=('size','sum'),
                                Min=('min','min'),
                                Max=('max','max'))
df = df.assign(Mean=df.pop('m1').div(df.pop('m2'))).reset_index()
print (df)
   QID  Min  Max       Mean
0    1   10   34  21.333333
1    2   23   60  36.666667

使用df.describe()它会产生你想要的所有信息.describe()是一个数据帧方法,因此可以将它粘贴在任何返回DataFrame对象的GroupBy语句的末尾

以下是文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html

相关问题 更多 >

    热门问题