Python 分组条件计数计算

Python 分组条件计数计算,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我正在计算下表的条件计数 v1|v2|v3| 2| 3| 4| | 5| 4| 5| 1| 4| 使用此df.isin\[4,5\].sum.divdf.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.s

我正在计算下表的条件计数

v1|v2|v3|
 2| 3| 4|
  | 5| 4|
 5| 1| 4|
使用此df.isin\[4,5\].sum.divdf.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.divdf.count.mean为每个代码获取一个值,但是我得到了一些奇怪的结果,比如

code|
v1  |0.985
v2  |0.475
v3  |0.874
而不是

code|
1234|0.611
2345|0.666
有人能帮我重新编写或执行我的命令,这样我就可以得到每个代码的值吗

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

代码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之类的吗?

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

给定如下所示的数据帧:

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

df.isin[4,5].stack.meanlevel=0,假设代码是您的索引。然后将其作为索引。我不明白为什么要除以df.count,或者为什么要求和,我发布的代码中都没有这两个值。然后我根本不明白您的输出。请检查并确认。您的输出与您的输入和给定的计算完全不一致。至少,由于组之间的数据相同,所以两个组之间的输出应该相同。请澄清。谢谢你的回答。您可以简单地评论一下,为什么这不是最佳方式?只要可能,您应该始终在pandas中使用矢量化函数,因为在帧上循环或使用apply/applymap相比而言比较慢。因此,尽管它确实可以工作,但对于足够大的数据集,您将开始注意到使用apply与矢量化实现之间的性能差异。