这是this question的扩展名:
我有一个Pandas数据框,例如:
dfq = pd.DataFrame({'COL1': ['USER1', 'USER1','USER2','USER2','USER2','USER3'],
'COL2' : ['MONTH1','MONTH2','MONTH1','MONTH1','MONTH2','MONTH1']
})
通常,这意味着每当客户使用该服务时,就会将一条记录以及用户ID和月份添加到表中。我平均需要知道客户每月使用该服务的次数。
我可以算出月份发生的次数:
dfq.groupby('COL2').count()
但是,如何从那里得到平均值?还是有更好的方法来做到这一点?
我想要的输出将是这样的:
如果我计算组数(月),然后除以记录总数,就可以得出原始平均值:
testcount = dfq.groupby('COL2').count()
len(dfq)
testcount/len(dfq)*100
哪一种给我答案,但我发现这是一个非常原始的过程。平均值不可信,我希望能够获得更多的统计信息:例如中位数和偏差。
换句话说,我想要他们做的here,但是在他们的情况下,他们是根据数值计算而我的值是字符串。我需要了解以下信息:每月该服务的客户中位数使用量是什么。
我希望这很清楚。
谢谢!
答案 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