【问题标题】:Assign the frequency of each value to dataframe with new column将每个值的频率分配给具有新列的数据框
【发布时间】:2020-01-30 21:12:05
【问题描述】:

我尝试设置一个 Dataframe 来计算一个称为频率的列。 此列应显示该值在每一行中数据框的特定列中出现的频率。像这样的:

Index  Category  Frequency    
     0        1         1
     1        3         2
     2        3         2
     3        4         1
     4        7         3
     5        7         3
     6        7         3
     7        8         1

这只是一个例子

我已经用 value_counts() 试过了,但是我只在出现的数字的最后一行收到一个值。 在例子的情况下

Index  Category  Frequency    
     0        1         1
     1        3         N.A
     2        3         2
     3        4         1
     4        7         N.A
     5        7         N.A
     6        7         3
     7        8         1

很重要的一点是该列与dataframe的行数相同,最好追加到同一个dataframe

【问题讨论】:

    标签: python pandas dataframe count duplicates


    【解决方案1】:
    df['Frequency'] = df.groupby('Category').transform('count')
    

    【讨论】:

      【解决方案2】:

      使用pandas.Series.map:

      df['Frecuency']=df['Category'].map(df['Category'].value_counts())
      

      pandas.Series.replace:

      df['Frecuency']=df['Category'].replace(df['Category'].value_counts())
      

      输出:

         Index  Category  Frecuency
      0      0         1          1
      1      1         3          2
      2      2         3          2
      3      3         4          1
      4      4         7          3
      5      5         7          3
      6      6         7          3
      7      7         8          1
      

      详情

      df['Category'].value_counts()
      7    3
      3    2
      4    1
      1    1
      8    1
      Name: Category, dtype: int64
      

      使用value_counts你得到一个系列,其index是类别的元素,values是计数。因此,您可以使用mappandas.Series.replace 创建一个系列,并将category 值替换为计数中的值。最后将此系列分配给frequency

      【讨论】:

        【解决方案3】:

        你可以使用下面的 group by 来做到这一点

        df.groupby("Category") \
        .apply(lambda g: g.assign(frequency = len(g))) \
        .reset_index(level=0, drop=True)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-08
          • 1970-01-01
          • 2018-06-12
          • 1970-01-01
          • 2021-07-05
          • 1970-01-01
          • 2015-11-21
          • 1970-01-01
          相关资源
          最近更新 更多