首页 > 解决方案 > Python,如何获取组中特定值的计数?

问题描述

我有一个包含 3 列的 pandas 数据框(df)

df.columns = ['date','color','tag']

“标签”列包含值“A”、“B”、“C”我想创建一个新列“l3A”,向我显示特定值的最后 3 次出现的计数,比如“标签”中的“A”列,但按颜色分组。

当我使用以下代码时,它可以工作,但仅适用于总行数范围内的出现总数。

df['l3A'] = df.query('tag == "A"').tag.count()

如何获取 df.groupby('color') 组和最后 3 行中特定值的出现次数?

标签: pythonpandas

解决方案


如果需要计算tag每组颜色的最后 3 个值(如果匹配),则A使用自定义函数GroupBy.transform获取由比较方式填充的布尔掩码填充sum的新列的最后 3 个值:newA

df=pd.DataFrame({'date': pd.date_range('2020-01-01', periods=8),
                 'color':['red','red','red','red','blue','green','green','green'],
                 'tag':['A','D','D','D','A','A','A','D']})
  
#sorting if necessary
# df = df.sort_values(['color','date'])

f = lambda x: x.tail(3).sum()
df['l3A'] = df.assign(new= df['tag'].eq("A")).groupby('color')['new'].transform(f)
print (df)
        date  color tag  l3A
0 2020-01-01    red   A    0
1 2020-01-02    red   D    0
2 2020-01-03    red   D    0
3 2020-01-04    red   D    0
4 2020-01-05   blue   A    1
5 2020-01-06  green   A    2
6 2020-01-07  green   A    2
7 2020-01-08  green   D    2

推荐阅读