#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
У меня есть два фрейма данных df1 и df2. Я хочу, чтобы выходные данные находились в диапазоне df2 с одним дополнительным условием. df1
Value1 con1 col1
0 35 3 App1
1 30 1 App1
2 23 1 App1
3 11 3 App1
4 29 0 App1
5 13 0 App2
6 13 1 App2
7 27 0 App2
8 14 0 App2
9 10 1 App2
df2
col1 L_limit U_limit condition
0 App1 20 30 1
1 App2 10 15 0
Требуется df
Value1 con1 col1
1 30 1 App1
2 23 1 App1
3 13 0 App2
4 14 0 App2
Комментарии:
1. Когда вы говорите «диапазон», что это такое, я не вижу никакого числового диапазона. можете ли вы объяснить, как вы получили требуемый фрейм данных
2. Я имею в виду диапазон как L_limit и U_limit, определенные в df2
Ответ №1:
Используйте DataFrame.merge
с фильтром по DataFrame.query
:
df = (df1.merge(df2.rename(columns={'condition':'con1'}),
on=['col1','con1'])
.query("L_limit <= Value1 <= U_limit")
.drop(['L_limit','U_limit'], axis=1))
print (df)
Value1 con1 col1
0 30 1 App1
1 23 1 App1
2 13 0 App2
4 14 0 App2
РЕДАКТИРОВАТЬ: вместо этого query
возможно использование DataFrame.loc
с boolean indexing
:
df = df1.merge(df2.rename(columns={'condition':'con1'}), on=['col1','con1'])
df = df.loc[df["Value1"].between(df["L_limit"], df["U_limit"]), ['Value1','con1','col1']]
print (df)
Value1 con1 col1
0 30 1 App1
1 23 1 App1
2 13 0 App2
4 14 0 App2
Комментарии:
1. Спасибо за ваш ответ. Есть ли какой-либо другой способ без использования DataFrame. запрос?