条件计数计算组

2024-10-01 17:24:53 发布

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

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

v1|v2|v3|
 2| 3| 4|
  | 5| 4|
 5| 1| 4|

用这个df.isin(\[4,5\]).sum().div(df.count()).mean()。我认为应用这个命令很容易,它由这样一个附加的列分组

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得到一个值,但是我得到了一些奇怪的结果,比如

code|
v1  |0.985
v2  |0.475
v3  |0.874

而不是

code|
1234|0.611
2345|0.666

有没有人能帮我重新编写或执行我的命令,这样我就可以得到每个code的值

************编辑:由于误解,我添加了更多信息

代码1234

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

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

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


Tags: orand代码divdfcodecolumnv3
1条回答
网友
1楼 · 发布于 2024-10-01 17:24:53

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

给定一个DataFrame看起来像这样:

>>> 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

请执行以下操作:

>>> 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

相关问题 更多 >

    热门问题