2016-08-24 9 views
2

私は2Dグリッドの各ノードの統計を計算する必要があります。私はこれを行う簡単な方法は、2つの範囲のクロス結合(別名デカルト積)を取ることだった。しかし、私はそれが値を低下pandasデータフレームにこれを変換する際にnumpy配列をpandasデータフレームに変換しました値が下がります

def node_grid(x_range, y_range, x_increment, y_increment): 
    x_min = float(x_range[0]) 
    x_max = float(x_range[1]) 
    x_num = (x_max - x_min)/x_increment + 1 
    y_min = float(y_range[0]) 
    y_max = float(y_range[1]) 
    y_num = (y_max - y_min)/y_increment + 1 

    x = np.linspace(x_min, x_max, x_num) 
    y = np.linspace(y_min, y_max, y_num) 

    ng = list(product(x, y)) 
    ng = np.array(ng) 
    return ng, x, y 

:私はこの本関数としてnumpyを使用して実装されています。例えば:

In [2]: ng = node_grid(x_range=(-60, 120), y_range=(0, 40), x_increment=0.1, y_increment=0.1) 
In [3]: ng[0][(ng[0][:,0] > -31) & (ng[0][:,0] < -30) & (ng[0][:,1]==10)] 
Out[3]: array([[-30.9, 10. ], 
    [-30.8, 10. ], 
    [-30.7, 10. ], 
    [-30.6, 10. ], 
    [-30.5, 10. ], 
    [-30.4, 10. ], 
    [-30.3, 10. ], 
    [-30.2, 10. ], 
    [-30.1, 10. ]]) 

In [4]: node_df = pd.DataFrame(ng[0]) 
node_df.columns = ['xx','depth'] 
print(node_df[(node_df.depth==10) & node_df.xx.between(-30,-31)]) 
Out[4]:Empty DataFrame 
Columns: [xx, depth] 
Index: [] 

データフレームは、空ではない:それらがパンダアレイに入れられている場合numpyのアレイから

In [5]: print(node_df.head()) 
Out[5]:  xx depth 
0 -60.0 0.0 
1 -60.0 0.1 
2 -60.0 0.2 
3 -60.0 0.3 
4 -60.0 0.4 

値がドロップされています。どうして?

+0

あなたが使用している 'product'機能を指定してくださいでした。投稿されたコードは私にとってはうまくいかない。 – Ascurion

答えて

1

の「間」機能は、最初の引数は後者よりも小さいことが要求されます。明確にするために

In: print(node_df[(node_df.depth==10) & node_df.xx.between(-31,-30)]) xx depth 116390 -31.0 10.0 116791 -30.9 10.0 117192 -30.8 10.0 117593 -30.7 10.0 117994 -30.6 10.0 118395 -30.5 10.0 118796 -30.4 10.0 119197 -30.3 10.0 119598 -30.2 10.0 119999 -30.1 10.0 120400 -30.0 10.0

使用product()機能がitertoolsパッケージから来ている、すなわち、from itertools import product

0

コードを完全に再現することはできません。

しかし、問題は、betweenクエリで下限と上限の境界を回る必要があることです。使用しているとき

print(node_df[(node_df.depth==10) & node_df.xx.between(-31,-30)]) 

:私のために、次の作品

ng = np.array([[-30.9, 10. ], 
       [-30.8, 10. ], 
       [-30.7, 10. ], 
       [-30.6, 10. ], 
       [-30.5, 10. ], 
       [-30.4, 10. ], 
       [-30.3, 10. ], 
       [-30.2, 10. ], 
       [-30.1, 10. ]]) 
node_df = pd.DataFrame(ng) 
関連する問題