Python 如何分组,然后计算每列中唯一项目的数量?

Python 如何分组,然后计算每列中唯一项目的数量?,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,使用此代码: import pandas df = pandas.DataFrame() df['id'] = list('aaabbbcccdddeee') df['gender'] = list('mmfmfmmffmfmfff') 我得到的数据帧如下: id gender 0 a m 1 a m 2 a f 3 b m 4 b f 5 b m 6 c m 7 c

使用此代码:

import pandas

df = pandas.DataFrame()

df['id']     = list('aaabbbcccdddeee')
df['gender'] = list('mmfmfmmffmfmfff') 
我得到的数据帧如下:

   id gender
0   a      m
1   a      m
2   a      f
3   b      m
4   b      f
5   b      m
6   c      m
7   c      f
8   c      f
9   d      m
10  d      f
11  d      m
12  e      f
13  e      f
14  e      f
如何将
df
id
进行拆分,然后计算每个类别中
m
f
的数量,以便得到类似以下内容的结果:

    m    f
a   2    1
b   2    1
c   1    2
d   2    1
e   0    3
您可以与
len一起使用:

res = df.pivot_table(index='id', columns='gender',
                     aggfunc=len, fill_value=0)

print(res)

gender  f  m
id          
a       1  2
b       1  2
c       2  1
d       1  2
e       3  0

最容易的
df.groupby(['id','gender']).gender.count().unstack(fill_value=0)
。。。如果您需要更高的性能,请尝试
pivot
crosstab
。我觉得如果它是重复的,您应该链接到重复的版本。谢谢你的回答。我做了,链接的答案在这里,别担心。。。作为复制品关闭不是一件坏事。还有,不客气!我不认为agg函数的差异是回答这个问题的原因,尽管它在其他方面都是重复的,但我会听从你更好的判断,因为我尊重你的意见。@coldspeed,这是我提出的一个有趣的问题。不幸的是,没有答案:(。