python-3.x - Pandas 优化了值的查找
问题描述
我有两个数据帧 simresult 和 skipper。
Simresult 的格式为:
player_id 0 1 2 3 ... 5 6 7 8 9
0 41843 16.38 10.97 0.37 15.38 ... 23.78 38.08 47.21 26.14 11.94
1 17648 30.14 41.08 1.92 0.18 ... 0.00 39.01 41.08 8.54 22.95
2 16500 19.72 14.38 12.99 3.74 ... 17.72 32.70 3.34 0.50 28.66
3 36727 8.96 30.07 28.45 0.00 ... 0.00 20.48 0.00 27.64 2.15
4 10512 46.59 16.94 1.54 0.00 ... 5.89 0.00 18.33 11.24 0.71
.. ... ... ... ... ... ... ... ... ... ... ...
船长是:
0 1 2 3 ... 6 7 8 9
0 449732 15862 1200230 10261 ... 814904 14622 16129 2500366
1 14759 10325 17769 16163 ... 10934 15862 17851 21540
2 14542 10934 2038972 2038976 ... 2039175 15181 35356 14622
3 11446 35356 10261 17851 ... 538921 16282 14542 34672
4 15806 21540 894408 37481 ... 15862 480013 15860 814065
.. ... ... ... ... ... ... ... ... ...
其中每个单元格都是一个 player_id。
我有一些代码从船长那里获取 player_ids 并按列从 simresult 中查找值,然后对行求和并给我一个列表列表。
即在船长中每行有 10 个 id,最终输出给我在第一列中查找的这 10 个 id 的总和,然后是第二列,依此类推。
此代码完全按预期工作。
size = skipper.shape[0]
runs = simresult.shape[1]-1
def getScores(r):
slist = []
for s in range(0,size): #size
z = 0
for l in range(0,10):
y = skipper.iloc[s,l]
x = simresult.loc[simresult['player_id'] == y, r].iloc[0]
z += x
z = round(z,2)
slist.append(z)
return(slist)
scores = np.empty((runs,0)).tolist()
for r in range(0,runs):
scores[r] = getScores(r)
在我获取列表列表并将其放入另一个 df 后的输出:
0 1 2 3 ... 6 7 8 9
0 73.90 128.52 106.79 151.37 ... 126.81 115.88 139.87 115.43
1 93.51 135.78 130.62 130.72 ... 136.51 133.90 179.96 207.32
2 112.65 174.84 131.14 103.40 ... 159.58 85.81 116.59 158.88
3 83.37 129.34 117.12 64.50 ... 175.28 69.81 142.74 110.61
4 80.90 142.68 90.23 128.25 ... 51.04 141.63 134.30 95.76
.. ... ... ... ... ... ... ... ... ...
我的问题:有没有更有效的方法来编写这个查找嵌套循环?
简化船长:
0 1 2 3 ... 6 7 8 9
0 449732 15862 1200230 10261 ... 814904 14622 16129 2500366
简化输出:
0 1 2 3 ... 6 7 8 9
0 73.90 128.52 106.79 151.37 ... 126.81 115.88 139.87 115.43
解决方案
使用魔法replace
rep_df = df.set_index('player_id')
out = skip.replace(rep_df)
推荐阅读
- angular - 如何实例化 DomSanitizationService
- qt - Qt creator:远程或添加项目模板
- excel - 函数返回单元格值而不是单元格位置 - VBA
- css - 如何使 flexbox 中的 div 出现在下一行?
- python-3.x - 读取多个 csv 文件时保留文件名
- java - Tomcat URL 无法被另一台 PC 访问
- regex - 2 个文本模式后的修剪值
- java - Java android 谷歌地图改变我所在的颜色折线
- javascript - 从 Angular 反应式 FormArray 获取同级 AbstractControl - 自定义验证
- javascript - 使用ajax单击每个节点时如何将数据传递和显示到弹出窗口?