我正在计算下表的条件计数(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|
使用此code
为每个df.isin(\[4,5\]).groupby().sum().div(df.count()).mean()
获取一个值,但我却得到了一些奇怪的结果,如
code|
v1 |0.985
v2 |0.475
v3 |0.874
代替
code|
1234|0.611
2345|0.666
有人可以帮助我重写或扩展我拥有的命令,以便我可以获取每个code
的值吗?
****************编辑:由于误解,我添加了更多信息
我们在
中输入的代码1234Column 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一样?
答案 0 :(得分:1)
一种方法是将groupby.apply
与code
一起用作索引,然后使用答案中提供的功能。这不是最佳解决方案,但可以实现您要添加的特定方法来计算平均值:
给出一个看起来像这样的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