Сопоставить два датафрейма
df1 = pd.DataFrame([['1, 2', '2, 2','3, 2','1, 1', '2, 1','3, 1']])
df2 = pd.DataFrame([[1, 2, 100, 'x'], [3, 4, 200, 'y'], [5, 6, 300, 'x']])
df22 = df2.rename(index = lambda x: x + 1).set_axis(np.arange(1, len(df2.columns) + 1), inplace=False, axis=1)
f = lambda x: df22.loc[tuple(map(int, x.split(',')))]
df = df1.applymap(f)
print (df)
Output:
0 1 2 3 4 5
0 2 4 6 1 3 5
df1 содержит значения 'строка, столбец' ('1, 2', '2, 2','3, 2'). Я пытаюсь найти по этим значениям значение в df2. Например, 1,2 это первая строка, второй столбец, это 2 в df2.
То что пытаюсь сделать: умножить полученное занчение на занчение из 3 столбца соответствующей строки и добавить x или y. (2*100x, 4*200y, 6*300x, 1*100x, 3*200y, 5*300x)
На выходе пытаюсь получить 5000(сумма всех x и y), 0.28 (1400/5000 - % y)
Ответы (1 шт):
Что-то вы намудрили с задачей и с исходными данными. Непонятно, зачем вам вообще нужен df1, если ы все равно перемножаете и суммируете все столбцы.
Можете сначала для наглядности сгруппировать фрейм по x и y так:
res = df2.groupby(3).apply(lambda x: x[0]*x[2] + x[1]*x[2]).to_frame()
теперь в res у вас:
0
3
x 0 300
2 3300
y 1 1400
Далее простая арифметика:
total = res[0].sum()
y_pct = res.loc["y"][0].sum()/total
print(y_pct)
print(total)
0.28
5000