有没有更有效的方法来聚合数据集并用Python或R计算频率?

时间:2019-03-16 14:12:08

标签: python r pandas

我有一个数据集[0,1,1,2],我想对其进行汇总。 为此,我必须手动计算并将“ frequency”:1/4放入DataFrame中。这是代码。

>>> df = pd.DataFrame({'value':[0, 1, 1, 2],
...             'frequency':1/4})
>>> df.groupby('value').sum()
       frequency
value           
0           0.25
1           0.50
2           0.25

有没有更有效的方法来聚合数据集并在Python或R中自动计算频率?

5 个答案:

答案 0 :(得分:2)

df['value'].value_counts(normalize=True,sort=False)

也许您可以尝试一下...

参考:-

  1. pandas.Series.value_counts()

答案 1 :(得分:2)

在R

prop.table(table(dat$value))

   0    1    2 
0.25 0.50 0.25 

在python中,NumPy

import numpy as np 
u,c=np.unique(df.value,return_counts=True)
pd.Series(c/c.sum(),index=u)
0    0.25
1    0.50
2    0.25
dtype: float64

答案 2 :(得分:1)

R中,您可以做类似的事情

library(data.table)
dt <- data.table(sample(0:2,100,replace=TRUE))
dt[,.N/nrow(dt),V1]

## > dt[,.N/nrow(dt),V1]

##    V1   V1
## 1:  1 0.33
## 2:  2 0.32
## 3:  0 0.35

答案 3 :(得分:0)

不使用熊猫,您可以使用Counter

from collections import Counter
z = [0,1,1,2]
Counter(z)
Counter({1: 2, 0: 1, 2: 1})

然后到数据框

x = Counter(z)
df = pd.DataFrame.from_dict(x, orient='index').reset_index()

然后将值除以4(您所需的频率)

答案 4 :(得分:-1)

import pandas as pd
pd.Series([0, 1, 1, 2]).value_counts(normalize=True, sort=False)