这是我正在使用的数据框:
company | pc-serial | software
--------+-----------+--------------------
A | 1 | Word
A | 1 | Excel
A | 2 | Word
A | 3 | PowerPoint
B | 4 | Word
B | 4 | Excel
B | 4 | Visio
B | 5 | Word
B | 5 | PowerPoint
我想构建一个新的数据框,告诉我每个公司拥有的独特软件的数量,结果应该是这样的:
company | unique_sw
--------+--------------
A | 3
B | 4
A有3个(Word,Excel和PowerPoint),B有4个(Word,Excel,PowerPoint和Visio)
我试过df.groupby('company')['software'].count()
它给了我A所有软件4的计数和B有5个。如果我改变count()
unique()
它会给我第一次出现“软件”。
所以我不知道如何聚合这个。
答案 0 :(得分:3)
请改用:
df.groupby('company')['software'].nunique()
答案 1 :(得分:0)
df.groupby('company').software.apply(lambda x : len(set(x))).to_frame('uniquecount')
Out[687]:
uniquecount
company
A 3
B 4
或者您可以按drop_duplicates
df.drop_duplicates(['company','software']).groupby('company').software.count()
Out[690]:
company
A 3
B 4
Name: software, dtype: int64