gpt4 book ai didi

python - 通过具有多个 if 语句的 Pandas 数据框优化循环和计算

转载 作者:行者123 更新时间:2023-12-04 10:26:57 24 4
gpt4 key购买 nike

所以我有一个包含三列的 csv 文件 x , yrank像这样:

x,y,rank
153271,30622,12
143400,125936,6
153718,31606,1
19680,168350,2
99291,47206,19
39208,112928,1
97469,169684,17
...

我想要做的是遍历这个 csv 文件并找到所有 xy具有 rank 的坐标值为 1。然后围绕每个 rank 为 1 的坐标“画”一个圆圈,并计算落入该圆圈内的值。然后我想计算所有具有 rank 的值此圆圈内的“1”值。通过这种方式,我可以计算与其他“等级”值相比,这些圆圈内有多少“等级”“1”值的百分比。

我已经使用下面的代码设法做到了这一点,但速度非常慢。用“rank”“1”打印每一行的 WinPercentage 大约需要 3 秒。然而,数据集相当大。它有 320 000 行,其中 1/64 的“等级”值为“1”。

我刚刚开始使用 python 和 pandas,所以这里的一切对我来说都很新。我只是想知道是否有更有效的方法来遍历数据。我曾尝试在 stackoverflow 中使用谷歌搜索和搜索,但没有成功找到任何可用的东西。
import csv
import pandas as pd

allDF = pd.read_csv ('players-with-rank-data.csv')
winnerDF = allDF[allDF['rank'] == 1]

def WinPercentageCalculator(allDF, winnerDF):
radius = 20000

for i in winnerDF.index:
center_x = allDF.at[i,'x']
center_y = allDF.at[i,'y']
jumperCountInsideRadius = 0
winnerCountInsideRadius = 0

for row in allDF.index:
x = allDF.at[row,'x']
y = allDF.at[row,'y']
dx = abs(x - center_x)
dy = abs(-y - -center_y)

if (dx*dx)+(dy*dy) <= (radius*radius):
jumperCountInsideRadius += 1
rank = allDF.at[row,'rank']

if rank == 1:
winnerCountInsideRadius += 1


winPercentage = (float(winnerCountInsideRadius) / float(jumperCountInsideRadius))
print(str(winPercentage))


WinPercentageCalculator(allDF, winnerDF)

最佳答案

它会减少几乎一半的时间复杂度@Ode,

import csv
import pandas as pd

allDF = pd.read_csv ('players-with-rank-data.csv')
winnerDF = allDF[allDF['rank'] == 1]

radius = 20000

for i in winnerDF.index:
center_x = allDF.at[i,'x']
center_y = allDF.at[i,'y']

#Check and resolve the minor changes w.r.t data, as data not visible its blind folded code
jumperCountInsideRadius = ( allDF['x'].subtract(center_x).pow(2) +
allDF['y'].subtract(center_y).pow(2) ).lt(radius**2).sum()
winnerCountInsideRadius = jumperCountInsideRadius.eq(1).sum()


winPercentage = (float(winnerCountInsideRadius) / float(jumperCountInsideRadius))
print(str(winPercentage))

关于python - 通过具有多个 if 语句的 Pandas 数据框优化循环和计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60600944/

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