分组条件计数计算

时间:2019-12-06 15:29:20

标签: python pandas pandas-groupby

我正在计算下表的条件计数(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的值吗?

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

我们在

中输入的代码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一样?

1 个答案:

答案 0 :(得分:1)

一种方法是将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