【问题标题】:is there a more efficient way to aggregate a dataset and calculate frequency in Python or R?有没有更有效的方法来聚合数据集并在 Python 或 R 中计算频率?
【发布时间】:2019-03-16 14:12:08
【问题描述】:

我有一个数据集 [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 中自动计算频率?

【问题讨论】:

  • 在 R 中你可以这样做:dat <- data.frame(value = c(0, 1, 1, 2)); table(dat$value) / nrow(dat)

标签: python r pandas


【解决方案1】:
df['value'].value_counts(normalize=True,sort=False)

也许你可以试试这个......

参考:-

  1. pandas.Series.value_counts()

【讨论】:

    【解决方案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
    

    【讨论】:

      【解决方案3】:

      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
      

      【讨论】:

        【解决方案4】:

        不使用 pandas 也可以使用 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(您想要的频率)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-17
          • 2023-03-12
          • 1970-01-01
          • 2011-03-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多