【问题标题】:Pandas: Incrementally count occurrences in a columnPandas:递增计数列中的出现次数
【发布时间】:2015-02-19 12:19:02
【问题描述】:

我有一个包含“名称”列的 DataFrame (df)。在标有“Occ_Number”的列中,我想对“名称”中每个值的出现次数进行统计。

例如:

Name            Occ_Number
 abc                     1
 def                     1
 ghi                     1
 abc                     2
 abc                     3
 def                     2
 jkl                     1
 jkl                     2

我一直在想办法使用

>df['Name'].value_counts()

但不能完全弄清楚如何将它们联系在一起。我只能从 value_counts() 中得到总计。到目前为止,我的过程涉及使用以下代码创建一个包含大于 1 的计数的“名称”列字符串值列表:

>things = df['Name'].value_counts()
>things = things[things > 1]
>queries = things.index.values

我希望然后以某种方式循环通过“名称”并通过检查查询有条件地添加到 Occ_Number,但这是我卡住的地方。有人知道这样做的方法吗?我将不胜感激任何帮助。谢谢!

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以使用cumcount 避免出现虚拟列:

    >>> df["Occ_Number"] = df.groupby("Name").cumcount()+1
    >>> df
      Name  Occ_Number
    0  abc           1
    1  def           1
    2  ghi           1
    3  abc           2
    4  abc           3
    5  def           2
    6  jkl           1
    7  jkl           2
    

    【讨论】:

      【解决方案2】:

      您可以添加一个帮助列,然后使用cumsum

      df =pd.DataFrame({'Name':['abc', 'def', 'ghi', 'abc', 'abc', 'def', 'jkl', 'jkl']})
      

      添加计数:

      df['counts'] =1
      

      按名称分组:

      cs =df.groupby('Name')['counts'].cumsum()
      # set series name
      cs.name = 'Occ_number'
      

      将系列加入数据框:

      # remove helper column
      del df['counts']
      df.join(cs)
      

      返回:

          Name    Occ_number
       0  abc     1
       1  def     1
       2  ghi     1
       3  abc     2
       4  abc     3
       5  def     2
       6  jkl     1
       7  jkl     2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-08
        • 2016-06-02
        • 1970-01-01
        • 2019-05-02
        • 2016-05-28
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多