新列中的组计数

时间:2019-09-12 08:18:19

标签: pandas group-by

我想要一个新列“ group_count”。这显示了该属性总共出现了多少个组。

       Group  Attribute  group_count
    0      1         10              4
    1      1         10              4
    2      1         10              4
    3      2         10              4
    4      2         20              1
    5      3         30              1
    6      3         10              4
    7      4         10              4

我试图对分组和属性进行分组,然后使用count进行转换

df["group_count"] = df.groupby(["Group", "Attributes"])["Attributes"].transform("count")

       Group  Attribute  group_count
0      1         10            3
1      1         10            3
2      1         10            3
3      2         10            1
4      2         20            1
5      3         30            1
6      3         10            1
7      4         10            1

但这不起作用

2 个答案:

答案 0 :(得分:2)

使用df.drop_duplicates(['Group','Attribute'])获取每个Attribute的唯一group,然后对Atttribute进行分组,以获取Group的数量,最后map加上原始Attribute列。

m=df.drop_duplicates(['Group','Attribute'])
df['group_count']=df['Attribute'].map(m.groupby('Attribute')['Group'].count())
print(df)

   Group  Attribute  group_count
0      1         10            4
1      1         10            4
2      1         10            4
3      2         10            4
4      2         20            1
5      3         30            1
6      3         10            4
7      4         10            4

答案 1 :(得分:1)

DataFrameGroupBy.nuniquetransform一起使用:

df['group_count1'] = df.groupby('Attribute')['Group'].transform('nunique')
print (df)
   Group  Attribute  group_count  group_count1
0      1         10            4             4
1      1         10            4             4
2      1         10            4             4
3      2         10            4             4
4      2         20            1             1
5      3         30            1             1
6      3         10            4             4
7      4         10            4             4