Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1 2 3 4 5 KEY
- 1 0 65 95 80 49 11
- 2 65 0 78 69 16 9
- 3 95 78 0 55 88 6
- 4 80 69 55 0 87 18
- 5 49 16 88 87 0 2
- exept0_a = df[2] != 0
- point_a = (df.loc[exept0_a, 2] / df.loc[exept0_a, 'KEY']).idxmin()
- exept0_b = (df[point_a] != 0) & ~df.index.isin([point_a])
- point_b = (df.loc[exept0_b, point_a] / df.loc[exept0_b, 'KEY']).idxmin()
- exept0_c = (df[point_b] != 0) & ~df.index.isin([point_a, point_b])
- point_c = (df.loc[exept0_c, point_b] / df.loc[exept0_c, 'KEY']).idxmin()
- list = [point_a, point_b, point_c]
- [4, 1, 2]
- import pandas as pd
- import numpy as np
- d = df.drop('KEY',1).div(df['KEY'], axis=0)
- d.values[np.diag_indices_from(d)] = np.inf
- In [42]: d
- Out[42]:
- 1 2 3 4 5
- 1 inf 5.909091 8.636364 7.272727 4.454545
- 2 7.222222 inf 8.666667 7.666667 1.777778
- 3 15.833333 13.000000 inf 9.166667 14.666667
- 4 4.444444 3.833333 3.055556 inf 4.833333
- 5 24.500000 8.000000 44.000000 43.500000 inf
- res = []
- def f(col):
- ret = col.loc[~col.index.isin(res)].idxmin()
- if ret not in res:
- res.append(ret)
- _ = d.apply(f)
- print(res)
- [4, 1, 2, 3, 5]
- print(res[:3])
- # [4, 1, 2]
- exept0[0] = df[2] != 0
- point[0] = (df.loc[exept0[0], 2] / df.loc[exept0[0], 'KEY']).idxmin()
- exept0[1] = (df[point[0]] != 0) & ~df.index.isin([point[0]])
- point[1] = (df.loc[exept0[1], point[0]] / df.loc[exept0[1], 'KEY']).idxmin()
- exept0[2] = (df[point[1]] != 0) & ~df.index.isin([point[0], point[1]])
- point[2] = (df.loc[exept0[2], point[1]] / df.loc[exept0[2], 'KEY']).idxmin()
- exept0 = []
- point = []
- exept0.append(df[2] != 0)
- point.append((df.loc[exept0[0], 2] / df.loc[exept0[-1], 'KEY']).idxmin())
- exept0.append((df[point[-1]] != 0) & ~df.index.isin([point[0]]))
- point.append((df.loc[exept0[-1], point[-1]] / df.loc[exept0[-1], 'KEY']).idxmin())
- exept0.append((df[point[-1]] != 0) & ~df.index.isin([point[0], point[1]]))
- point.append((df.loc[exept0[-1], point[-1]] / df.loc[exept0[-1], 'KEY']).idxmin())
- exept0 = []
- point = []
- exept0.append(df[2] != 0)
- point.append((df.loc[exept0[0], 2] / df.loc[exept0[-1], 'KEY']).idxmin())
- exept0.append((df[point[-1]] != 0) & ~df.index.isin(point))
- point.append((df.loc[exept0[-1], point[-1]] / df.loc[exept0[-1], 'KEY']).idxmin())
- exept0.append((df[point[-1]] != 0) & ~df.index.isin(point))
- point.append((df.loc[exept0[-1], point[-1]] / df.loc[exept0[-1], 'KEY']).idxmin())
- # Нулевой этап объединили с инициализацией
- exept0 = [df[2] != 0]
- point = [(df.loc[exept0[0], 2] / df.loc[exept0[-1], 'KEY']).idxmin()]
- # Остались этапы от 1 до n
- for i in range(1, n):
- exept0.append((df[point[-1]] != 0) & ~df.index.isin(point))
- point.append((df.loc[exept0[-1], point[-1]] / df.loc[exept0[-1], 'KEY']).idxmin())
- # На выходе списки длиной n
Add Comment
Please, Sign In to add comment