【发布时间】:2021-12-30 14:07:53
【问题描述】:
我正在计算一些足球数据。
我有以下数据框:
{'Player': {8: 'Darrel Williams', 2: 'Mark Ingram', 3: 'Michael Carter', 4: 'Najee Harris', 10: 'James Conner', 0: 'Buffalo Bills', 15: 'Davante Adams', 1: 'Aaron Rodgers', 5: 'Tyler Bass', 11: 'Corey Davis', 6: 'Van Jefferson', 14: 'Matt Ryan', 7: 'T.J. Hockenson', 9: 'Antonio Brown', 12: 'Alvin Kamara', 13: 'Tyler Boyd'}, 'Position': {8: 'RB', 2: 'RB', 3: 'RB', 4: 'RB', 10: 'RB', 0: 'DEF', 15: 'WR', 1: 'QB', 5: 'K', 11: 'WR', 6: 'WR', 14: 'QB', 7: 'TE', 9: 'WR', 12: 'RB', 13: 'WR'}, 'Score': {8: 24.9, 2: 18.8, 3: 16.2, 4: 15.3, 10: 13.9, 0: 12.0, 15: 11.3, 1: 10.48, 5: 9.0, 11: 8.8, 6: 6.9, 14: 1.68, 7: 0.0, 9: 0.0, 12: 0.0, 13: 0.0}}
| Player | Position | Score |
|---|---|---|
| Darrel Williams | RB | 24.9 |
| Mark Ingram | RB | 18.8 |
| Michael Carter | RB | 16.2 |
| Najee Harris | RB | 15.3 |
| James Conner | RB | 13.9 |
| Buffalo Bills | DEF | 12 |
| Davante Adams | WR | 11.3 |
| Aaron Rodgers | QB | 10.48 |
| Tyler Bass | K | 9 |
| Corey Davis | WR | 8.8 |
| Van Jefferson | WR | 6.9 |
| Matt Ryan | QB | 1.68 |
| T.J. Hockenson | TE | 0 |
| Antonio Brown | WR | 0 |
| Alvin Kamara | RB | 0 |
| Tyler Boyd | WR | 0 |
鉴于以下requirements_dictionary,我要做的是为每个key(数据框中的Position)提取顶部value(数据框中的Score):
requirements_dictionary = {'QB': 1, 'RB': 2, 'WR': 2, 'TE': 1, 'K': 1, 'DEF': 1, 'FLEX': 2}
让这变得具有挑战性的是,对于最终的 key、FLEX,它与 数据框中的任何位置相匹配,因为该值 可能是位置:RB, WR, 或 TE。
最终输出应如下所示:
| Player | Position | Score |
|---|---|---|
| Darrel Williams | RB | 24.9 |
| Mark Ingram | RB | 18.8 |
| Michael Carter | RB | 16.2 |
| Najee Harris | RB | 15.3 |
| Buffalo Bills | DEF | 12 |
| Davante Adams | WR | 11.3 |
| Aaron Rodgers | QB | 10.48 |
| Tyler Bass | K | 9 |
| Corey Davis | WR | 8.8 |
| T.J. Hockenson | TE | 0 |
因为那是最上面的2 RB, 1 QB, 2 WR, 1 TE, 1 K, 1 DEF 和2 FLEX。
我已经尝试了以下代码,这让我很接近:
all_points.groupby('Position')['Score'].nlargest(2)
Position
DEF 0 12.00
K 5 9.00
QB 1 10.48
14 1.68
RB 8 24.90
2 18.80
TE 7 0.00
WR 15 11.30
11 8.80
Name: Score, dtype: float64
但是,这并不能说明FLEX“位置”
我也可以循环遍历数据框并手动执行此操作,但这似乎非常密集。
我怎样才能达到预期的效果?
【问题讨论】:
标签: python pandas pandas-groupby aggregate