我刚刚开始使用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
非常感谢任何想法!谢谢你的帮助!
答案 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