(x,y)sp值的分数

2024-10-01 07:12:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的数据帧,但是有几十万行:

df

    D   x           y
0   y   5.887672    6.284714
1   y   9.038657    10.972742
2   n   2.820448    6.954992
3   y   5.319575    15.475197
4   n   1.647302    7.941926
5   n   5.825357    13.747091
6   n   5.937630    6.435687
7   y   7.789661    11.868023
8   n   2.669362    11.300062
9   y   1.153347    17.625158

我想知道每个x:y网格空间中的值(“D”)的比例是“n”

我可以用暴力,通过x和y来计算百分比:

zonexy = {}
for x in np.arange(0,10,2.5):
    dfx = df[(df['x'] >= x) & (df['x'] < x+2.5)]
    zonexy[x] = {}
    for y in np.arange(0,24,6):
        dfy = dfx[(dfx['y'] >= y) & (dfx['y'] < y+6)]
        try:
            pctn = len(dfy[dfy['Descr']=='n'])/len(dfy) * 100.0
        except ZeroDivisionError:
            pctn = 0
        zonexy[x][y] = pctn

输出:

pd.DataFrame(zonexy)

    0.0 2.5 5.0 7.5
0   0   0   0   0
6   100 100 50  0
12  0   0   50  0
18  0   0   0   0

但是这个,以及我尝试过的所有关于这个主题的变化,都非常缓慢。似乎应该有一个更有效的方法(可能通过numpy),但我对它的空白


Tags: 数据in网格dfforlennp空间
1条回答
网友
1楼 · 发布于 2024-10-01 07:12:32

一种方法是使用numpy的2D直方图函数:

那么

  1. 在符合条件的数据上运行一次(这里,“D”是“n”)
  2. 对所有数据再次运行
  3. 将第一个结果按元素除以第二个结果

相关问题 更多 >