Python 按列分组并添加列以计算值的出现次数

Python 按列分组并添加列以计算值的出现次数,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下代码: import numpy as np from random import randrange groups = [randrange(1,8) for x in range(50)] df = pd.DataFrame(groups,columns = ["group"]) df["dummy1"] = pd.Series(np.random.randint(20,size = len(df))) df["dummy2&quo

我有以下代码:

import numpy as np
from random import randrange

groups = [randrange(1,8) for x in range(50)]
df = pd.DataFrame(groups,columns = ["group"])
df["dummy1"] = pd.Series(np.random.randint(20,size = len(df)))
df["dummy2"] = pd.Series(np.random.randint(20,size = len(df)))
分组数据是显而易见的,我们可以这样说:

groups = df.groupby("group").agg({"dummy1":[np.sum,np.mean]})
      dummy1            count_1 count_3
         sum       mean                
group                                  
1        128   9.846154       2       1
2         70  10.000000       4       3
3         89  12.714286       2       3
4         65   8.125000       4       4
5         93  15.500000       4       3
6         69  11.500000       3       1
7         31  10.333333       4       2
但是,我想计算特定值在
df[“dummy1”]
中的出现次数。在组中,我希望有一列显示每个值的计数。例如:

groups = df.groupby("group").agg({"dummy1":[np.sum,np.mean]})
      dummy1            count_1 count_3
         sum       mean                
group                                  
1        128   9.846154       2       1
2         70  10.000000       4       3
3         89  12.714286       2       3
4         65   8.125000       4       4
5         93  15.500000       4       3
6         69  11.500000       3       1
7         31  10.333333       4       2
我想要这样的东西:

groups = df.groupby("group").agg({"dummy1":[np.sum,np.mean]})
      dummy1            count_1 count_3
         sum       mean                
group                                  
1        128   9.846154       2       1
2         70  10.000000       4       3
3         89  12.714286       2       3
4         65   8.125000       4       4
5         93  15.500000       4       3
6         69  11.500000       3       1
7         31  10.333333       4       2

有什么简单的方法可以做到这一点吗?我尝试了一种只添加新列的解决方案,显示
df[“dummy1”]
值是否为例如1,然后在聚合组时对列使用求和。但是,即使是我的数据集,它的速度也非常慢,大约有10万个条目。

您可以尝试使用
groupby
进行
value\u计数,然后加入您的
groupby().agg()


对于
128
之和的
count_1
是否具有
2
的值,因为您的数据集中存在该数据的两个值?
df.groupby('group')['dummy1'].size()
有什么问题?对于该组,值1出现2次。是的,这就是它的意思。
df.groupby('group')['dummy1'].size()
计算每个组的大小,这不是我想要的。我想计算组内
df['dummy1']
的特定值的出现率,这与组的大小不同。这看起来是一个不错的方法。我是否可以指定要查找的值,因为这会为所有值提供一个新列?我看不到选择值的明确方法。您最好使用两个独立的
groupby