【问题标题】:Pandas: Calculate Median of Group count over ColumnsPandas:计算列中组数的中位数
【发布时间】:2020-05-27 06:04:58
【问题描述】:

这是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,但在他们的情况下,他们计算的是数值,而我的值是字符串。我需要了解以下信息:客户每月使用该服务的中位数是多少

我希望这很清楚。

谢谢!

【问题讨论】:

  • 您是在计算每个用户还是每个的平均值?
  • 嗨@MattR,我正在计算每月的平均值
  • 我对你的问题有点困惑,在这个例子中 3 是理想的输出吗?如果不能,您可以编辑并提供您想要的输出吗?
  • @Sebastian,我刚刚添加了更多信息。我希望这能让它更清楚。
  • df.groupby(['COL2'], as_index=False).count().describe() 这是否接近您想要的解决方案?我仍然不确定你需要什么,因为你写的是平均值,然后你计算分布。

标签: python pandas dataframe


【解决方案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

【讨论】:

  • 非常感谢@Grzegorz Skibinski。我将尝试一下并报告。
猜你喜欢
  • 2016-05-17
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多