Начните с добавления столбца DatTim (типа DateTime ), взяв исходные данные из Date и Time :
[ 110] Затем, предполагая, что ID
является «обычным» столбцом (не индексом), вы должны вызвать:
groupby
для столбца DatTim
с частотой 5 min
. drop_duplicates
, причем subset
включает только столбец ID
. DatTim
из индекса. Выражая вышеприведенную инструкцию в Python:
df2 = df.groupby(pd.Grouper(key='DatTim', freq='5min'))\
.apply(lambda grp: grp.drop_duplicates(subset='ID'))\
.reset_index(level=0, drop=True)
Если вы print(df2)
, вы получите:
ID Date Time DatTim
0 12 2012-1-1 00:01:00 2012-01-01 00:01:00
1 13 2012-1-1 00:01:30 2012-01-01 00:01:30
3 12 2012-1-1 00:05:10 2012-01-01 00:05:10
4 12 2012-1-1 00:10:00 2012-01-01 00:10:00
Чтобы «очистить», вы можете бросить DatTim
столбец:
df2.drop('DatTim', axis=1)
Если ID
является индексом, требуется небольшое изменение:
df2 = df.groupby(pd.Grouper(key='DatTim', freq='5min'))\
.apply(lambda grp: grp[~grp.index.duplicated(keep='first')])\
.reset_index(level=0, drop=True)
И затем напечатано [1117 ] это:
Date Time DatTim
ID
12 2012-1-1 00:01:00 2012-01-01 00:01:00
13 2012-1-1 00:01:30 2012-01-01 00:01:30
12 2012-1-1 00:05:10 2012-01-01 00:05:10
12 2012-1-1 00:10:00 2012-01-01 00:10:00
Конечно, и в этом случае вы можете удалить столбец DatTim
.
MooTools sortables на самом деле лучше, чем script.aculo.us, потому что они являются динамичными; MooTools позволяет дополнение/удаление объектов к списку. Когда новый объект добавляется к script.aculo.us поддающемуся сортировке, необходимо уничтожить/воссоздать поддающееся сортировке для создания нового объекта поддающимся сортировке. Там будет много служебным при этом, если список будет иметь много элементов. Я должен был переключиться от script.aculo.us до более легкого MooTools только из-за этого ограничения и закончил тем, что был чрезвычайно доволен тем решением.
MooTools способ сделать недавно добавленный объект поддающимся сортировке справедлив:
sortables.addItems(node);
Я пользовался библиотекой Yahoo User Interface, чтобы сделать это прежде:
Хорошо, я сделал еще некоторый обыск и выяснил что-то, что, кажется, главным образом работает.
edit.html.erb:
...
<table id="invoices">
<thead>
<tr>
<th>Id</th>
<th>Description</th>
</tr>
</thead>
<tbody id="line_items">
<%= render :partial => 'invoice_line_item', :collection => @invoice.invoice_line_items.sort %>
</tbody>
</table>
<%= sortable_element('line_items', {:url => {:action => :update_index}, :tag => :tr, :constraint => :vertical}) -%>
...
app/controllers/invoices.rb
...
def update_index
params["line_items"].each_with_index do |id, index|
InvoiceLineItem.update(id, :index => index)
end
render :nothing => true
end
...
Важная часть: отметьте =>: TR в "sortable_element" и параметрических усилителях ["line_items"] - это дает новый список идентификаторов и инициировано на отбрасывании.
Вред: Делает запрос Ajax к отбрасыванию, я думаю, что предпочел бы хранить порядок и обновление, когда пользователь совершает нападки, "сохраняют". Непротестированный на IE.
Scriptaculous sortables походит на способ пойти, так как он встроен. http://github.com/madrobby/scriptaculous/wikis/sortable
Интерфейс Yahoo был легче, чем я ожидал, имел что-то притягательная работа меньше чем за четыре часа.
Мне нравится jQuery http://docs.jquery.com/UI/Sortables
$ (" #myList") .sortable ({});
Необходимо будет написать некоторый код для сохранения его, но это не настолько жестко.