Подобно предложению @locojay, вы можете применить difflib
's get_closest_matches
к индексу df2
, а затем применить join
:
In [23]: import difflib
In [24]: difflib.get_close_matches
Out[24]:
In [25]: df2.index = df2.index.map(lambda x: difflib.get_close_matches(x, df1.index)[0])
In [26]: df2
Out[26]:
letter
one a
two b
three c
four d
five e
In [31]: df1.join(df2)
Out[31]:
number letter
one 1 a
two 2 b
three 3 c
four 4 d
five 5 e
.
Если это были столбцы, в том же духе вы могли бы применить к столбцу, тогда merge
:
df1 = DataFrame([[1,'one'],[2,'two'],[3,'three'],[4,'four'],[5,'five']], columns=['number', 'name'])
df2 = DataFrame([['a','one'],['b','too'],['c','three'],['d','fours'],['e','five']], columns=['letter', 'name'])
df2['name'] = df2['name'].apply(lambda x: difflib.get_close_matches(x, df1['name'])[0])
df1.merge(df2)
Похож на Вас, взял код от Копия Greasemonkey\JavaScript к кнопке Clipboard или первоисточнику этого отрывка...
Этот код был для Механика, следовательно unsafeWindow. И я предполагаю, что синтаксическая ошибка в IE прибывает из const
ключевое слово, которое характерно для Firefox (замените его var
).
Насколько я знаю, что только работает в Internet Проводник.
Видят также Динамические Инструменты - Копия JavaScript К Буферу обмена , но это требует, чтобы пользователь изменил конфигурацию сначала, и даже затем это не делает, кажется, работает.
Чтение и изменение буфера обмена от веб-страницы ставят вопросы безопасности и конфиденциальности. Однако в Internet Проводник, возможно сделать это. Я нашел этот отрывок в качестве примера :
<script type="text/javascript">
function select_all(obj) {
var text_val=eval(obj);
text_val.focus();
text_val.select();
r = text_val.createTextRange();
if (!r.execCommand) return; // feature detection
r.execCommand('copy');
}
</script>
<input value="http://www.sajithmr.com"
onclick="select_all(this)" name="url" type="text" />
Другие методы скопируют простой текст в буфер обмена. Для копирования HTML (т.е., можно вставить результаты в редактора WSIWYG), можно сделать следующее в IE ТОЛЬКО . Это, существенно отличается от других методов, поскольку браузер на самом деле явно выбирает содержание.
// create an editable DIV and append the HTML content you want copied
var editableDiv = document.createElement("div");
with (editableDiv) {
contentEditable = true;
}
editableDiv.appendChild(someContentElement);
// select the editable content and copy it to the clipboard
var r = document.body.createTextRange();
r.moveToElementText(editableDiv);
r.select();
r.execCommand("Copy");
// deselect, so the browser doesn't leave the element visibly selected
r.moveToElementText(someHiddenDiv);
r.select();
silent !mkdir ~/.vim_backup > /dev/null 2>&1
, станет silent call mkdir ($HOME.'/.vim_backup', 'p')
– m42e
6 June 2014 в 19:53
В браузерах кроме IE необходимо использовать маленький объект флэш-памяти управлять буфером обмена, например,
Начиная с Flash 10, копировать в буфер обмена можно только в том случае, если действие происходит от взаимодействия пользователя с объектом Flash. (Читайте соответствующий раздел из анонса Adobe Flash 10)
Решением является наложение флеш-объекта над кнопкой Copy или любым другим элементом, инициирующим копирование. Zero Clipboard в настоящее время является лучшей библиотекой с такой реализацией. Опытные Flash-разработчики могут просто захотеть создать свою собственную библиотеку.
Я попробовал много решений. Если это будет работать в современных браузерах, то это не будет в IE. если это будет работать в IE, то это не будет в IOS. Наконец ухаживавший их всех и прибыл в ниже фиксации, которая работает во всех браузерах, IOS, webview, и андроиде.
Примечание: Также покрытый сценарий, где пользователь отклоняет разрешение к буферу обмена. Кроме того, сообщение "ссылка, скопированная", будет отображено, даже если пользователь скопирует вручную.
<div class="form-group col-md-12">
<div class="input-group col-md-9">
<input name="copyurl"
type="text"
class="form-control br-0 no-focus"
id="invite-url"
placeholder="http://www.invitelink.com/example"
readonly>
<span class="input-group-addon" id="copy-link" title="Click here to copy the invite link">
<i class="fa fa-clone txt-18 text-success" aria-hidden="true"></i>
</span>
</div>
<span class="text-success copy-success hidden">Link copied.</span>
Сценарий:
var addEvent = window.attachEvent || window.addEventListener;
var event = 'copy';
var $inviteUrl = $('#invite-url');
$('#copy-link').on('click', function(e) {
if ($inviteUrl.val()) {
if (navigator.userAgent.match(/ipad|ipod|iphone/i)) {
var el = $inviteUrl.get(0);
var editable = el.contentEditable;
var readOnly = el.readOnly;
el.contentEditable = true;
el.readOnly = false;
var range = document.createRange();
range.selectNodeContents(el);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
el.setSelectionRange(0, 999999);
el.contentEditable = editable;
el.readOnly = readOnly;
document.execCommand('copy');
$inviteUrl.blur();
} else {
$inviteUrl.select();
document.execCommand("copy");
}
}
});
addEvent(event, function(event) {
if ($inviteUrl.val() && event.target.id == 'invite-url') {
var $copyLink = $('#copy-link i');
$copyLink.removeClass('fa-clone');
$copyLink.addClass('fa-check');
$('.copy-success').removeClass('hidden');
setTimeout(function() {
$copyLink.removeClass('fa-check');
$copyLink.addClass('fa-clone');
$('.copy-success').addClass('hidden');
}, 2000);
}
});
Вот легкий пример;)
<!DOCTYPE html>
<html>
<body>
<input type="text" value="Hello World" id="myInput">
<button onclick="myFunction()">Copy text</button>
<p>The document.execCommand() method is not supported in IE8 and earlier.</p>
<script>
function myFunction() {
var copyText = document.getElementById("myInput");
copyText.select();
document.execCommand("copy");
alert("Copied the text: " + copyText.value);
}
</script>
</body>
</html>
function copytoclipboard(element) {
var $temp = $("<input>");
$("body").append($temp);
$temp.val('0'+element).select();
document.execCommand("copy");
$temp.remove();
}
Это - автономный класс и гарантирует, что никакое высвечивание не могло произойти от временного файла textarea
путем размещения его вне экрана.
Это работает в Safari (рабочий стол), FF и Chrome.
// ================================================================================
// ClipboardClass
// ================================================================================
var ClipboardClass = (function() {
function copyText(text) {
// Create temp element off-screen to hold text.
var tempElem = $('<textarea style="position: absolute; top: -8888px; left: -8888px">');
$("body").append(tempElem);
tempElem.val(text).select();
document.execCommand("copy");
tempElem.remove();
}
// ============================================================================
// Class API
// ============================================================================
return {
copyText: copyText
};
})();