【发布时间】:2019-11-03 00:10:13
【问题描述】:
所以我的数据框现在看起来像这样:
| Name | Type | Class | Amount |
|------|------|---------|--------|
| Abel | A | Chinese | 2 |
| Abel | B | English | 5 |
| Abel | C | Science | -1 |
| Abel | D | Physics | -10 |
| Cain | C | Chinese | -5 |
| Cain | B | Science | 0 |
| Cain | A | English | 30 |
| Cain | D | Chinese | 2 |
|------|------|---------|--------|
数据样本:
data = {'Name': ['Abel', 'Abel', 'Abel', 'Abel', 'Cain', 'Cain', 'Cain', 'Cain'],
'Type': ['A', 'B', 'C', 'D', 'C', 'B', 'A', 'D'],
'Class': ['Chinese', 'English', 'Science', 'Physics', 'Chinese', 'Science', 'English', 'Chinese'],
'Amount': [2,5,-1,-10,-5,0,30,2]}
我正在尝试根据数量为每个名称查找前 n 类和前 n 类。
我尝试了 df.groupby(["Name","Type"]).sum() ,它为我提供了分组,但我如何选择前 5 个以便我可以将它们转换为 5 个不同的列?
例如前 3 种类型的最终输出应该是这样的,前 3 类只是类似的东西,除了列是第 1 类到第 3 类:
| Name | Type 1 | Type 2 | Type 3 |
|------|--------|--------|--------|
| Abel | B | A | C |
| Cain | A | D | B |
我尝试了 sort_values,然后也尝试了 .head(5),但不知何故,排序将负数视为最大的。此外,结果也脱离了分组。请问有什么帮助吗?谢谢!
【问题讨论】:
-
你能从样本数据中添加预期的输出吗?什么是
X,P, W值? -
@jezrael 好的,抱歉,我意识到这很混乱。 X、P、W 只是类型属性的值。让我在示例中添加这些值
-
data = {'Name': ['Abel', 'Abel', 'Abel', 'Abel', 'Cain', 'Cain', 'Cain', 'Cain'], ' Type': ['A', 'B', 'C', 'D', 'C', 'B', 'A', 'D'], 'Class': ['Chinese', 'English', 'Science', 'Physics', 'Chinese', 'Science', 'English', 'Chinese'], '金额': [2,5,-1,-10,-5,0,30,2]}
-
你能解释一下
but somehow the sort treats negative numbers as the biggest.吗? -
@jezrael 抱歉,我搞混了,这是因为我正在按组键排序,如果我只按名称级别排序就可以了。
标签: python pandas dataframe pandas-groupby