Python (x,y)空间中值的分数

Python (x,y)空间中值的分数,python,pandas,Python,Pandas,我有一个看起来像这样的数据框,但有几十万行: 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.43

我有一个看起来像这样的数据框,但有几十万行:

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

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

一种方法是使用numpy的2D直方图功能:

那么

  • 在符合条件的数据上运行一次(这里,“D”是“n”)
  • 在所有数据上再次运行它
  • 将第一个结果按元素除以第二个结果
  • 谢谢这是有效的(一旦我记得根据完整的数据集而不是子集设置范围和箱子),而且速度更快,几秒钟而不是一小时。
    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