减去&在groupby

时间:2018-01-16 19:21:04

标签: python pandas

我刚刚开始使用pandas / python,所以不幸的是我还是要问愚蠢的问题。 我有一个带有主题id的列的df,然后是一个编码为1或0的列,如下所示:

df = pd.DataFrame({'ID' : [1] * 4 + [2] * 4, 
               'accuracy' : [1, 1, 0, 1, 1, 1, 0, 1]})
df

    ID  accuracy
0   1         1
1   1         1
2   1         0
3   1         1
4   2         1
5   2         1
6   2         0
7   2         1

我需要先将ID分组,得到0和1的频率计数,然后减去&将这些频率计数除以这样: (频率计数 - 频率计数零/总计数)。因此,对于ID 1,该等式将为((3-1)/ 4)。使用这个,

 df.groupby(['ID'])['accuracy'].value_counts()

我得到零和&的频率计数。我的后续计算所需的每个ID。但我不确定如何从这里开始,或者是一个完全不同的方法,如agg和lambda函数或某种使用apply的方法(我刚开始学习这两种方法)将是一种更好的方法。理想情况下,输出看起来像这样:

id    accuracyTotal
1     0.5
2     0.5

非常感谢任何想法!谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

怎么样:

df.groupby('ID')['accuracy'].apply(lambda p : 2.*p.sum()/p.count() -1)

假设:

O:计数的 Z:零的数量
N:总计数= O + Z

我用了这个事实:

Z = N - O

因此:

(O - Z)/ N =(2 * O - N)/ N = 2 * O / N -1