Python 如何在组中创建自定义列,然后在组中创建聚合
我有以下格式的Python 如何在组中创建自定义列,然后在组中创建聚合,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下格式的DataFrame | User | CodeID | Language | | ------------- |---------------| -------- | | foo | 1 | C | | foo | 2 | C | | foo | 3 | CPP | | bar
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 |
| User | C | CPP | Java | Total |
| ---- | -- | --- | ---- | ----- |
| foo | 2 | 1 | 0 | 3 |
| bar | 1 | 2 | 1 | 4 |
现在我想要的是计算每种语言中每个用户的代码数量。也就是说,我需要以下格式的数据帧
| User | CodeID | Language |
| ------------- |---------------| -------- |
| foo | 1 | C |
| foo | 2 | C |
| foo | 3 | CPP |
| bar | 4 | C |
| bar | 5 | CPP |
| bar | 6 | Java |
| bar | 7 | CPP |
| User | C | CPP | Java | Total |
| ---- | -- | --- | ---- | ----- |
| foo | 2 | 1 | 0 | 3 |
| bar | 1 | 2 | 1 | 4 |
需要指出的是,语言的数量是动态的。但是,如果有人能够提供一个具有固定语言集的解决方案,这是可以的提前感谢
您可以使用
交叉表
计算总计
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
或
或
我不会称之为“自定义列”,只是语言的交叉列表column@smci我是新来的熊猫,对这些术语不太熟悉。欢迎来到SOGreat solve!再次感谢。不过,我会要求另外两个即兴表演。首先,删除二阶索引。可能它有一个更具体的名字。但是,我不熟悉熊猫。希望你得到了我想要的。其次,我有
Language
值,比如C++
,C++4.0.0-8
,C++4.3.2
。我想把它们都看成是<代码> CPP < /代码>。类似地,C
对于C
和C99
。我该怎么做?