按计算分组熊猫
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_counts
与Series.map
一起使用:
df['value'] = 10 / df['category'].map(df['category'].value_counts())
或者:
df['value'] = df['category'].map(df['category'].value_counts()).rdiv(10)
【讨论】:
【参考方案2】:您可以将groupby
与transform
一起使用:
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
您还可以预先计算值计数并将它们作为参数添加到您的应用函数。
【讨论】:
以上是关于按计算分组熊猫的主要内容,如果未能解决你的问题,请参考以下文章