У меня есть набор данных, подобный этому, созданный из файла с годовыми данными.
d1 = pd.DataFrame({'category': ['A', 'B', 'C', 'D', 'E', 'F'],
'col': ['20%', '40%', '80%', '40%', '60%', '20%']})
Кроме того, набор данных, аналогичный этому, создается с использованием другого набора данных, который ежемесячно
d2 = pd.DataFrame({'category': ['A', 'B', 'C', 'D', 'E', 'F'],
'20%': ['2.1', '4.1', '6.8', '5.9', '3.4', '5.4'],
'40%': ['1.9', '3.7', '6.1', '4.8', '4.1', '7.2'],
'60%': ['3.1', '4.9', '6.5', '7.1', '7.9', '5.1'],
'80%': ['2.5', '4.5', '5.6', '6.9', '8.4', '7.4']})
Я хочу получить такой вывод, где он возвращает значение элемента из d2 на основе двух столбцов в d1.
op = pd.DataFrame({'category': ['A', 'B', 'C', 'D', 'E', 'F'],
'col': ['20%', '40%', '80%', '40%', '60%', '20%'],
'min_value': ['2.1', '3.7', '5.6', '4.8', '7.9', '5.4']})
Я не уверен, как сделать этот поиск значений






Используйте DataFrame.melt для разворота, а затем левое соединение в DataFrame.merge:
df = d1.merge(d2.melt('category', value_name='min_value', var_name='col'), how='left')
print (df)
category col min_value
0 A 20% 2.1
1 B 40% 3.7
2 C 80% 5.6
3 D 40% 4.8
4 E 60% 7.9
5 F 20% 5.4
Альтернатива с DataFrame.join и DataFrame.stack:
df = d1.join(d2.set_index('category').stack().rename('min_value'), on=['category','col'])