我正在计算下表的条件计数(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现在我们计算this:= (1/2+1/3+3/3)/3=0.61111的平均值
这是一个代码。所有代码我都需要这个。在R中,我会说我将每个代码的表分成一个列表,并计算我上面所做的事情。我想知道我是否可以通过扩展我的另一个问题得到的代码行来做到这一点。比如使用.groupby之类的?
发布于 2019-12-07 03:07:42
一种方法是使用带有code的groupby.apply作为索引,然后使用答案中提供的函数。这不是一个最优的解决方案,但它可以实现您想要添加计算平均值的特定方式:
给定一个如下所示的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: float64https://stackoverflow.com/questions/59216001
复制相似问题