Панды - Соотношение между строками

Мне нужно узнать долю элементов столбца относительно определенного значения в этом столбце. Например, в этой таблице A я хочу узнать отношение столбца Metric к значению, где {id1=x и id2=z} этого столбца. Кто-нибудь может мне помочь, пожалуйста?

Например:

Таблица А

+-------+------+-------+
| id1   | id2  | metric|
+-------+------+-------+
| x     |  z   | 100   |
| x     |  w   | 10    |
+-------+------+-------+

Правильный результат:

Таблица Б

+-------+------+-------+-------+
| id1   | id2  | metric| result|
+-------+------+-------+-------+
| x     |  z   | 100   |  1    | (100/100)
| x     |  w   | 10    |  0.1  | (10/100)
+-------+------+-------+-------+

Код:

d = {'id1': ['x', 'x'], 'id2': ['z','w'], 'metric': [100,10] }
df = pd.DataFrame(data=d)
df

person Thaise    schedule 15.01.2019    source источник
comment
Мне нужно автоматически обнаружить значение «100» в этой позиции. В этом случае было 100, но это был просто пример, это могло быть любое другое значение.   -  person Thaise    schedule 15.01.2019


Ответы (1)


Если я вас правильно понял, вы описываете следующее:

Настраивать

d = {'id1': ['x', 'x'], 'id2': ['z','w'], 'metric': [100,10] }
df = pd.DataFrame(data=d)
df

Решение

# Manually choose the value by which to scale the column 'metric'
scaler = df.loc[(df['id1'] == 'x') & (df['id2'] == 'z'), 'metric'].values

# Divide all 'metric' values by the above scaler value
df['result'] = df['metric'] / scaler

df
  id1 id2  metric  result
0   x   z     100     1.0
1   x   w      10     0.1
person Peter Leimbigler    schedule 15.01.2019
comment
Идеальный! Спасибо! :) - person Thaise; 15.01.2019