python - pandas - 根据不同数据框中的另一个值获取值
问题描述
我有数据框以下列方式保存玩家的所有统计数据
player_id runs balls_faced strike_rate name match_date
4120 20 5 0.0 Aravind, S 2015-10-02
3788 10 10 0.0 Ashwin, R 2010-06-12
基于此数据框,我创建了另一个数据框,该数据框通过此代码聚合和计算某些统计信息
player_data = dataFrame.groupby('player_id').aggregate({'runs': [np.sum,np.min,np.max,np.mean],
'strike_rate':'mean',
'player_id' : 'count'
}).reset_index()
player_data.columns = player_data.columns.get_level_values(0)
player_data.columns = ['player_id','total_runs','min_run','max_run','average','strike_rate','total_matches']
player_data.sort_values(['total_runs','average','strike_rate'], ascending=False)
上面的代码给了我以下数据框
player_id total_runs min_run max_run average strike_rate total_matches
4120 108 0 21 3.857143 54.568571 28
3788 1177 0 77 20.293103 103.391207 58
我需要以下作为最终输出
Player_name player_id total_runs min_run max_run average strike_rate total_matches
Aravind, S 4120 108 0 21 3.857143 54.568571 28
Ashwin, R 3788 1177 0 77 20.293103 103.391207 58
但由于按其他信息分组,例如玩家姓名等信息丢失。我需要保留这些信息。我尝试了几件事,例如 iloc 或使用 is_index = False 进行 groupby ,但似乎没有任何效果。
我正在努力的最终解决方案是创建一个只有名称和 id 的数据框并从中删除重复项,然后合并 id 上的两个数据框,但我觉得必须有一些更好或更有效的方法来做到这一点。
解决方案
创建一个聚合函数:
f = dict.fromkeys(dataFrame, 'first')
f.update({'runs': [np.sum,np.min,np.max,np.mean],
'strike_rate':'mean',
'player_id' : 'count'
})
现在,传递f
给 player_data:
player_data = dataFrame.groupby('player_id').aggregate(f)
这里的想法是将您不想丢失的所有内容汇总为具有原始值组中的第一个值。
在“姓名”的情况下,每个值都是相同的(AKA,玩家姓名),所以只取第一个值在理论上是有意义的。
另一种方法,如果它只是您想要添加的名称列(而不是其他),您可以构建 player_ids 到名称的映射,然后手动将您的名称列添加到结果中。
mapping = dict(zip(dataFrame.player_id, dataFrame.name))
...
player_data['name'] = player_data['player_id'].map(mapping)
推荐阅读
- regex - 为以下字符串生成正则表达式
- android - Facebook 提供商未配置。确保添加 `facebook_application_id` 字符串
- azure - Azure 广告应用程序权限
- marklogic - MarkLogic 负载平衡与 marklogic-client-api
- c++ - 专门为一个参数使用两个模板参数(C++ 模板)
- python-3.x - 如何创建可以通过更改变量结束的计时脚本?
- javascript - Jquery:获取节点的内容,不包括跨度
- javascript - Javascript/CSS 显示/隐藏有时不工作
- watir - How do I close the child window and start operating on first window
- python - 将数组添加到 numpy 数组