2017-11-27 2 views
1

Ich habe 3 Datenrahmen.verschmelzen 3 Datenrahmen in eine Matrix

  1. warehouse_to_outlet_distance.

    wh_name outlet_id distance 
    aaa  111   10 
    aaa  222   20 
    aaa  333   30 
    
  2. outlet_to_outlet_distance

    source_outlet_id dest_outlet_id distance 
    111     222   5 
    111     333   7 
    222     111   8 
    222     333   6 
    333     111   10 
    333     222   12 
    
  3. outlet_to_warehouse_distance

    outlet_id wh_name dist 
    111   aaa  13 
    222   aaa  15 
    333   aaa  11 
    

Ich möchte diese in eine martix konvertieren:

 0 111  222  333 
    0 0  10  20  30  
111 13  0  5   7 
222 15  8  0   6 
333 11  10  12   0 

wobei 0 representd 'Lager'
in Reihe 1, der Abstand zwischen Lager (0) 111 zum Auslass , die

in der jeweiligen Zelle gelegt wird

Antwort

0

Verwendung unstack oder pivot für umformen und fügen Sie dann neue Zeile und neue Spalte, letzter Sortierindex und Spaltennamen:

df = outlet_to_outlet_distance.set_index(['source_outlet_id','dest_outlet_id'])['distance'] 
           .unstack(fill_value=0) 
df[0] = outlet_to_warehouse_distance.set_index('outlet_id')['dist'] 
#appended 0 Series for avoid NaN in 0,0 
df.loc[0] = warehouse_to_outlet_distance.set_index('outlet_id')['distance'] 
             .append(pd.Series(0, index=[0])) 
df = df.sort_index().sort_index(axis=1) 
df = df.rename_axis(None).rename_axis(None, 1) 
print (df) 
    0 111 222 333 
0  0 10 20 30 
111 13 0 5 7 
222 15 8 0 6 
333 11 10 12 0 

Alternative:

df = outlet_to_outlet_distance.pivot('source_outlet_id','dest_outlet_id', 'distance') 
df[0] = outlet_to_warehouse_distance.set_index('outlet_id')['dist'] 
df.loc[0] = warehouse_to_outlet_distance.set_index('outlet_id')['distance'] 
df = df.sort_index().sort_index(axis=1).fillna(0).astype(int) 
df = df.rename_axis(None).rename_axis(None, 1) 
print (df) 
    0 111 222 333 
0  0 10 20 30 
111 13 0 5 7 
222 15 8 0 6 
333 11 10 12 0 
Verwandte Themen