首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >条件计数计算groupwise

条件计数计算groupwise
EN

Stack Overflow用户
提问于 2019-12-06 23:29:20
回答 1查看 48关注 0票数 0

我正在计算下表的条件计数(only 4's and 5's divided by all values over all columns)

代码语言:javascript
复制
v1|v2|v3|
 2| 3| 4|
  | 5| 4|
 5| 1| 4|

使用这个df.isin(\[4,5\]).sum().div(df.count()).mean()。我认为应用这个命令会很容易,该命令通过一个额外的列进行分组,如下所示

代码语言:javascript
复制
code|v1|v2|v3|
1234|2| 3| 4|
1234| | 5| 4|
1234|5| 1| 4|
2345|2|  | 4|
2345| | 5| 4|
2345|5| 1| 4|

使用这个df.isin(\[4,5\]).groupby().sum().div(df.count()).mean()为每个code获取一个值,但是我得到了一些奇怪的结果,比如

代码语言:javascript
复制
code|
v1  |0.985
v2  |0.475
v3  |0.874

而不是

代码语言:javascript
复制
code|
1234|0.611
2345|0.666

有没有人可以帮我重写或扩展我的命令,这样我就可以得到每个code的值

*

代码1234我们在

代码语言:javascript
复制
Column 1: one 4 or 5 and 2 values alltogether. = 1/2
Column 2: one 4 or 5 and 3 values alltogether = 1/3
Column 3: three 4 or 5 and 3 values alltogether = 3/3

现在我们计算this:= (1/2+1/3+3/3)/3=0.61111的平均值

这是一个代码。所有代码我都需要这个。在R中,我会说我将每个代码的表分成一个列表,并计算我上面所做的事情。我想知道我是否可以通过扩展我的另一个问题得到的代码行来做到这一点。比如使用.groupby之类的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-07 03:07:42

一种方法是使用带有codegroupby.apply作为索引,然后使用答案中提供的函数。这不是一个最优的解决方案,但它可以实现您想要添加计算平均值的特定方式:

给定一个如下所示的DataFrame

代码语言:javascript
复制
>>> df
   code    v1    v2 v3
0  1234     2     3  4
1  1234  None     5  4
2  1234     5     1  4
3  2345     2  None  4
4  2345  None     5  4
5  2345     5     1  4

执行以下操作:

代码语言:javascript
复制
>>> df.set_index('code').groupby(level=0).apply(lambda d: d.isin((4, 5)).sum().div(d.count()).mean())
code
1234    0.611111
2345    0.666667
dtype: float64
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59216001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档