Учитывая следующие два dataframes
:
df1 = pd.DataFrame(data={'unicorn': ['blue', 'red', 'piNk'], 'size': [3, 4, 6]})
df2 = pd.DataFrame(data={'unicorn': ['red'], 'size': [2]})
Df1:
unicorn size
0 blue 3
1 red 4
2 piNk 6
Df2 (всегда имеет одну строку):
unicorn size
0 red 2
Как я могу сравнить строки обоих столбцов dataframes
, используя пользовательские функции сравнения, подобные этому (упрощенному):
def unicorn_comparison(str1, str2) -> float:
return 100.0 if str1 == str2 else 0.0
А также
def size_comparison(nr1, nr2) -> float:
return 100.0 if nr1 < nr2 else 0.0
Ожидаемый результат:
unicorn size
0 0.0 0.0
1 100.0 0.0
2 0.0 0.0
3 ответа
Поскольку у вас всегда есть одна строка в df2, используйте не DataFrame (2D), а Series (1D).
ser = df2.loc[0]
Затем, если вам просто нужно сравнение, используйте векторный код (а не пользовательскую функцию):
out = df1.eq(ser)*100
Если вам действительно нужно использовать невекторную функцию и сравнивать все комбинации, используйте:
def unicorn_comparison(str1, str2) -> float:
return 100.0 if str1 == str2 else 0.0
def size_comparison(nr1, nr2) -> float:
return 100.0 if nr1 < nr2 else 0.0
funcs = {'unicorn': unicorn_comparison,
'size': size_comparison
}
out = df1.apply(lambda c: c.apply(lambda s: funcs[c.name](s, ser[c.name])))
Выход:
unicorn size
0 0 0
1 100 0
2 0 0
df1
. Любите решение. Спасибо!
Свой путь. первый; добавьте нужный столбец df2.
df1['unicorn2'] = df2['unicorn']
После; Вы можете использовать «цикл приложения». Вы можете запустить логику, которую хотите, в «цикле приложения».
def function(x):
# your logic
return x
df1_result = df1.apply(function)
for col in df1:
df1[col] = (df1[col] == df2[col].loc[0]).replace({True: 100, False: 0})
Это перезапишет ваш df1
, или вы можете сначала сделать его копию.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.