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
。