按计算分组熊猫

Posted

技术标签:

【中文标题】按计算分组熊猫【英文标题】: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
-----------------------------

如何做到这一点?

【问题讨论】:

你能提供最少的可重现代码吗?我想试试看。 【参考方案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

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

【讨论】:

以上是关于按计算分组熊猫的主要内容,如果未能解决你的问题,请参考以下文章

当日期不唯一时,在熊猫中按日期分组后计数观察值

使用熊猫按日期范围分组

如何按定义的时间间隔对熊猫数据框进行分组?

如何使用熊猫按 10 分钟对时间序列进行分组

熊猫按块分组而不是单个值

如何按多列分组以在熊猫数据框中列出