【问题标题】:Group by calculation pandas按计算分组熊猫
【发布时间】:2021-11-11 04:46:51
【问题描述】:

申请groupby后我有一个数据框:

category | item
------------------
A        | a_item1
         | a_itme2
         | a_item3
------------------
B        | b_item1
         | b_item2
------------------

对此,我想添加一个带有计算的新列:10 / (no of items per category)。 对于示例数据,这将是:

category | item   |  value
----------------------------
A        | a_item1|   3.33
         | a_itme2|   3.33
         | a_item3|   3.33
----------------------------
B        | b_item1|   5
         | b_item2|   5
-----------------------------

如何做到这一点?

【问题讨论】:

  • 你能提供最少的可重现代码吗?我想试试看。

标签: python pandas dataframe group-by pandas-groupby


【解决方案1】:

Series.value_countsSeries.map 一起使用:

df['value'] = 10 / df['category'].map(df['category'].value_counts())  

或者:

df['value'] = df['category'].map(df['category'].value_counts()).rdiv(10)

【讨论】:

    【解决方案2】:

    您可以将groupbytransform 一起使用:

    df['value'] = 10 / df.groupby('category')['item'].transform('count')
    

    【讨论】:

      【解决方案3】:

      您可以将 pandas apply 函数用于数据帧。

      定义要应用于每一行的函数:

      def get_value(s: pd.Series):
          vc = df['category'].value_counts()
          return 10/vc[s['category']]
      

      对每一行使用 apply:

      df['value'] = df.apply(get_value, axis=1)
      df
      
      #   category    item     value
      # 0        A    a_item1  3.333333
      # 1        A    a_item2  3.333333
      # 2        A    a_item3  3.333333
      # 3        B    b_item1  5.000000
      # 4        B    b_item2  5.000000
      

      您还可以预先计算值计数并将它们作为参数添加到您的应用函数。

      【讨论】:

        猜你喜欢
        • 2020-03-24
        • 1970-01-01
        • 2022-07-19
        • 2020-04-20
        • 2018-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多