我有以下格式的DataFrame
。
| User | CodeID | Language |
| ------------- |---------------| -------- |
| foo | 1 | C |
| foo | 2 | C |
| foo | 3 | CPP |
| bar | 4 | C |
| bar | 5 | CPP |
| bar | 6 | Java |
| bar | 7 | CPP |
现在,我要为每个用户计算每种语言的代码数量。那就是我想要的DataFrame
采用以下格式。
| User | C | CPP | Java | Total |
| ---- | -- | --- | ---- | ----- |
| foo | 2 | 1 | 0 | 3 |
| bar | 1 | 2 | 1 | 4 |
需要注意的是,语言数量是动态的。但是,如果有人可以提供一套固定的语言解决方案,那是没有问题的。 预先感谢。
答案 0 :(得分:3)
您可以使用crosstab
并计算总数
In [223]: pd.crosstab(df.User, df.Language).assign(Total=lambda x: x.sum(axis=1))
Out[223]:
Language C CPP Java Total
User
bar 1 2 1 4
foo 2 1 0 3
或
In [247]: df.pivot_table(index='User', columns='Language', values='CodeID',
aggfunc=len).assign(Total=lambda x: x.sum(1))
Out[247]:
Language C CPP Java Total
User
bar 1.0 2.0 1.0 4.0
foo 2.0 1.0 NaN 3.0
或
In [250]: df.groupby(['User', 'Language']).size().unstack(fill_value=0)
Out[250]:
Language C CPP Java
User
bar 1 2 1
foo 2 1 0