У меня есть два кадра данных: main_df (cols=['Technology', 'Condition1', Condition2']
) и database_df (cols=['Technology', 'Values1', 'Values2'])
.
. Я сгруппировал database_df в зависимости от столбца Technology
:
grouped = database_df.groupby(['Technology'])
Теперь я хотел бы получить pd.series
main_df['Technology']
в main_df, для каждой строки извлечь соответствующую группу, отфильтровать в соответствии с некоторыми условиями в зависимости от некоторых других значений столбца main_df и вернуть Столбец ['Character']
первой строки (из database_df), который удовлетворяет условиям.
Т.е. я хотел бы сделать что-то вроде:
grouped = database_df.groupby(['Technology'])
main_df['New column'] = (
grouped.get_group(main_df['Technology']).loc[
(grouped.get_group(main_df['Technology']))['Values1'] > main_df['Condition1'])
& (grouped.get_group(main_df['Technology']))['Values2'] > main_df['Condition2'])]['Character'][0])
Однако я не могу передать pd.Series как аргумент метода get_group. Я понимаю, что, возможно, мог бы передать main_df['Technology']
в качестве str для каждой записи, применяющей лямбда-функцию, но я хотел бы выполнить эту операцию векторным способом ... Есть ли способ?
ПРИМЕР МИНИМАЛЬНОЙ ЖИЗНИ:
main_df = pd.DataFrame({'Technology': ['A','A','B'],
'Condition1': [20, 10, 10],
'Condition2': [100, 200, 100]})
database_df = pd.DataFrame({'Technology':['A', 'A', 'A', 'B', 'B', 'B'],
'Values1':[10, 20, 30, 10, 20, 30],
'Values2':[100, 200, 300, 100, 200, 300]
'Character':[1, 2, 3, 1, 2, 3]})
Я бы хотел, чтобы результат вышеупомянутой операции с этими dfs был:
main_df['New column'] = [3, 3, 2]