【发布时间】:2020-06-02 17:14:20
【问题描述】:
上下文
对于每支球队,我想要包含前三名得分球员的数据框行。
在我的脑海中,它是Dataframe.nlargest() 和Dataframe.groupby() 的组合,但我不认为这是受支持的。
我理想的解决方案是:
- 直接在
df上执行,无需创建其他数据帧 - 清晰,并且
- 相对性能好(真正的 df 形状是 7M 行和 5 列)
输入
import pandas as pd
df = pd.read_json('{"team":{"0":"A","1":"A","2":"A","3":"A","4":"A","5":"B","6":"B","7":"B","8":"B","9":"B","10":"C","11":"C","12":"C","13":"C","14":"C"},"player":{"0":"Alice","1":"Becky","2":"Carmen","3":"Donna","4":"Elizabeth","5":"Fran","6":"Greta","7":"Heather","8":"Iris","9":"Jackie","10":"Kelly","11":"Lucy","12":"Molly","13":"Nina","14":"Ophelia"},"points":{"0":15,"1":11,"2":13,"3":8,"4":10,"5":28,"6":29,"7":18,"8":25,"9":9,"10":12,"11":23,"12":18,"13":10,"14":15}}')
| team | player | points |
|------|-----------|--------|
| A | Alice | 15 |
| A | Becky | 11 |
| A | Carmen | 13 |
| A | Donna | 8 |
| A | Elizabeth | 10 |
| B | Fran | 28 |
| B | Greta | 29 |
| B | Heather | 18 |
| B | Iris | 25 |
| B | Jackie | 9 |
| C | Kelly | 12 |
| C | Lucy | 23 |
| C | Molly | 18 |
| C | Nina | 10 |
| C | Ophelia | 15 |
所需的输出
df_output = pd.read_json('{"team":{"0":"A","1":"A","2":"A","3":"B","4":"B","5":"B","6":"C","7":"C","8":"C"},"player":{"0":"Alice","1":"Becky","2":"Carmen","3":"Fran","4":"Greta","5":"Iris","6":"Lucy","7":"Molly","8":"Ophelia"},"points":{"0":15,"1":11,"2":13,"3":28,"4":29,"5":25,"6":23,"7":18,"8":15}}')
df_output
| team | player | points |
|------|---------|--------|
| A | Alice | 15 |
| A | Becky | 11 |
| A | Carmen | 13 |
| B | Fran | 28 |
| B | Greta | 29 |
| B | Iris | 25 |
| C | Lucy | 23 |
| C | Molly | 18 |
| C | Ophelia | 15 |
【问题讨论】:
标签: python pandas dataframe pandas-groupby