Я считаю, что необходимо:
df['a'].value_counts() / 3
Решения с groupby
и agg
:
df.groupby('a').agg({'a': 'count'}) / 3
df.groupby('a').agg({'a': lambda x: x.count() / 3})
df.groupby('a')['a'].agg(lambda x: x.count() / 3)
Для случайных чисел в группах делите на числа от 1 до 10, а не между0 и 10 во избежание деления 0
(затем получите inf
) на numpy.random.randint
:
df = pd.DataFrame({
'a': [1,1,1,2,2,3,3,3,3],
'b': list(range(9))
})
print (df)
a b
0 1 0
1 1 1
2 1 2
3 2 3
4 2 4
5 3 5
6 3 6
7 3 7
8 3 8
df1 = df.groupby('a')['a'].agg(lambda x: x.count() / np.random.randint(1, 10))
print (df1)
a
1 0.500000
2 0.285714
3 0.500000
Name: a, dtype: float64