gpt4 book ai didi

python - pandas - 根据不同数据框中的另一个值获取值

转载 作者:行者123 更新时间:2023-12-01 09:16:00 26 4
gpt4 key购买 nike

我的数据框以以下方式保存玩家的所有统计数据

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)

这里的想法是将您不希望丢失的所有内容聚合为原始值组中的第一个值。

就“Name”而言,每个值都是相同的(又名玩家姓名),因此理论上只取第一个值是有意义的。

<小时/>

另一种方法,如果您只想添加“名称”列(而不是其他任何内容),则可以构建player_ids 到“名称”的映射,然后手动将“名称”列添加到结果中。

mapping = dict(zip(dataFrame.player_id, dataFrame.name))
...
player_data['name'] = player_data['player_id'].map(mapping)

关于python - pandas - 根据不同数据框中的另一个值获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51247978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com