2016-12-07 7 views
1

私はABの2つの場所の間に距離dを含むデータフレームnetを持っています。その後Python:行列とデータフレームの間の値をマップする方法は?

net = 
     A B d 
    0 5 3 3.5 
    1 2 0 2.3 
    2 3 2 1.2 
    3 4 5 2.2 
    4 0 1 3.2 
    5 0 3 4.5 

私は、二対の間のすべての可能な距離が含まれている対称行列Mを持っている:

M = 
    0 1 2 3 4 5 
0 0 3.2 2.3 4.5 1.7 5.2 
1 3.2 0 2.1 0.7 3.9 3.8 
2 2.3 2.1 0 1.2 1.5 4.7 
3 4.5 0.7 1.2 0 3.2 3.5  
4 1.7 3.9 1.5 3.2 0 2.2 
5 5.2 3.8 4.7 3.5 2.2 0 

私は2つのランダム異なる場所を含む新しいデータフレームdf1を生成したいAB同じ距離間隔のds > np.floor(d) & ds < np.floor(d)+1にあります。

これは私がエラー `はAttributeErrorを得たものを私は照会することを使用すると1の床分割で

H = [] 
W = [] 
for i in net.index: 
    tmp = net['d'][i] 
    ds = np.where((M > np.floor(tmp)) & (M < np.floor(tmp)+1)) 
    size = len(ds[0]) 
    ind = randint(size) ## find two random locations with distance ds 
    h = ds[0][ind] 
    w = ds[1][ind] 
    H.append(h) 
    W.append(w) 
df1 = pd.DataFrame() 
df1['A'] = H 
df1['B'] = W 

答えて

1

グループMをやっているし、サンプル

g = M.stack().index.to_series().groupby(M.stack() // 1) 
net.d.apply(lambda x: pd.Series(g.get_group(x // 1).sample(1).iloc[0], list('AB'))) 

enter image description here

+0

次のとおりです。 'numpy.ndarray'オブジェクトには属性 'vstack'がありません – emax

関連する問題