Guest User

Untitled

a guest
Mar 23rd, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.86 KB | None | 0 0
  1. 1 2 3 4 5 KEY
  2. 1 0 65 95 80 49 11
  3. 2 65 0 78 69 16 9
  4. 3 95 78 0 55 88 6
  5. 4 80 69 55 0 87 18
  6. 5 49 16 88 87 0 2
  7.  
  8. exept0_a = df[2] != 0
  9. point_a = (df.loc[exept0_a, 2] / df.loc[exept0_a, 'KEY']).idxmin()
  10. exept0_b = (df[point_a] != 0) & ~df.index.isin([point_a])
  11. point_b = (df.loc[exept0_b, point_a] / df.loc[exept0_b, 'KEY']).idxmin()
  12. exept0_c = (df[point_b] != 0) & ~df.index.isin([point_a, point_b])
  13. point_c = (df.loc[exept0_c, point_b] / df.loc[exept0_c, 'KEY']).idxmin()
  14.  
  15. list = [point_a, point_b, point_c]
  16. [4, 1, 2]
  17.  
  18. import pandas as pd
  19. import numpy as np
  20.  
  21. d = df.drop('KEY',1).div(df['KEY'], axis=0)
  22. d.values[np.diag_indices_from(d)] = np.inf
  23.  
  24. In [42]: d
  25. Out[42]:
  26. 1 2 3 4 5
  27. 1 inf 5.909091 8.636364 7.272727 4.454545
  28. 2 7.222222 inf 8.666667 7.666667 1.777778
  29. 3 15.833333 13.000000 inf 9.166667 14.666667
  30. 4 4.444444 3.833333 3.055556 inf 4.833333
  31. 5 24.500000 8.000000 44.000000 43.500000 inf
  32.  
  33. res = []
  34.  
  35. def f(col):
  36. ret = col.loc[~col.index.isin(res)].idxmin()
  37. if ret not in res:
  38. res.append(ret)
  39.  
  40. _ = d.apply(f)
  41.  
  42. print(res)
  43.  
  44. [4, 1, 2, 3, 5]
  45.  
  46. print(res[:3])
  47.  
  48. # [4, 1, 2]
  49.  
  50. exept0[0] = df[2] != 0
  51. point[0] = (df.loc[exept0[0], 2] / df.loc[exept0[0], 'KEY']).idxmin()
  52.  
  53. exept0[1] = (df[point[0]] != 0) & ~df.index.isin([point[0]])
  54. point[1] = (df.loc[exept0[1], point[0]] / df.loc[exept0[1], 'KEY']).idxmin()
  55.  
  56. exept0[2] = (df[point[1]] != 0) & ~df.index.isin([point[0], point[1]])
  57. point[2] = (df.loc[exept0[2], point[1]] / df.loc[exept0[2], 'KEY']).idxmin()
  58.  
  59. exept0 = []
  60. point = []
  61.  
  62. exept0.append(df[2] != 0)
  63. point.append((df.loc[exept0[0], 2] / df.loc[exept0[-1], 'KEY']).idxmin())
  64.  
  65. exept0.append((df[point[-1]] != 0) & ~df.index.isin([point[0]]))
  66. point.append((df.loc[exept0[-1], point[-1]] / df.loc[exept0[-1], 'KEY']).idxmin())
  67.  
  68. exept0.append((df[point[-1]] != 0) & ~df.index.isin([point[0], point[1]]))
  69. point.append((df.loc[exept0[-1], point[-1]] / df.loc[exept0[-1], 'KEY']).idxmin())
  70.  
  71. exept0 = []
  72. point = []
  73.  
  74. exept0.append(df[2] != 0)
  75. point.append((df.loc[exept0[0], 2] / df.loc[exept0[-1], 'KEY']).idxmin())
  76.  
  77. exept0.append((df[point[-1]] != 0) & ~df.index.isin(point))
  78. point.append((df.loc[exept0[-1], point[-1]] / df.loc[exept0[-1], 'KEY']).idxmin())
  79.  
  80. exept0.append((df[point[-1]] != 0) & ~df.index.isin(point))
  81. point.append((df.loc[exept0[-1], point[-1]] / df.loc[exept0[-1], 'KEY']).idxmin())
  82.  
  83. # Нулевой этап объединили с инициализацией
  84. exept0 = [df[2] != 0]
  85. point = [(df.loc[exept0[0], 2] / df.loc[exept0[-1], 'KEY']).idxmin()]
  86.  
  87. # Остались этапы от 1 до n
  88. for i in range(1, n):
  89. exept0.append((df[point[-1]] != 0) & ~df.index.isin(point))
  90. point.append((df.loc[exept0[-1], point[-1]] / df.loc[exept0[-1], 'KEY']).idxmin())
  91.  
  92. # На выходе списки длиной n
Add Comment
Please, Sign In to add comment