熊猫:计算列的组计数中位数

时间:2020-05-26 20:55:05

标签: python pandas dataframe

这是this question的扩展名:

我有一个Pandas数据框,例如:

dfq = pd.DataFrame({'COL1': ['USER1', 'USER1','USER2','USER2','USER2','USER3'], 
               'COL2' : ['MONTH1','MONTH2','MONTH1','MONTH1','MONTH2','MONTH1']
               })

Original Data Frame

通常,这意味着每当客户使用该服务时,就会将一条记录以及用户ID和月份添加到表中。我平均需要知道客户每月使用该服务的次数。

我可以算出月份发生的次数:

dfq.groupby('COL2').count()

Count

但是,如何从那里得到平均值?还是有更好的方法来做到这一点?

我想要的输出将是这样的:

如果我计算组数(月),然后除以记录总数,就可以得出原始平均值:

testcount = dfq.groupby('COL2').count()
len(dfq)
testcount/len(dfq)*100

Average per month

哪一种给我答案,但我发现这是一个非常原始的过程。平均值不可信,我希望能够获得更多的统计信息:例如中位数和偏差。

换句话说,我想要他们做的here,但是在他们的情况下,他们是根据数值计算而我的值是字符串。我需要了解以下信息:每月该服务的客户中位数使用量是什么

我希望这很清楚。

谢谢!

1 个答案:

答案 0 :(得分:1)

请考虑以下内容:

df=dfq.assign(cnt=1).groupby(list(dfq.columns), as_index=False)["cnt"].sum()

然后打开提到的操作的机会窗口:

res_mean=df.groupby("COL2")["cnt"].apply(np.median)

res_std=df.groupby("COL2")["cnt"].apply(np.std)

据此返回:

COL2
MONTH1    1.0
MONTH2    1.0
Name: cnt, dtype: float64
COL2
MONTH1    0.471405
MONTH2    0.000000
Name: cnt, dtype: float64