Что самый простой путь состоит в том, чтобы позволить пользователю перетаскивать строки таблицы для изменения их порядка?

Начните с добавления столбца 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.

12
задан Mark S. 3 October 2008 в 16:33
поделиться

6 ответов

MooTools sortables на самом деле лучше, чем script.aculo.us, потому что они являются динамичными; MooTools позволяет дополнение/удаление объектов к списку. Когда новый объект добавляется к script.aculo.us поддающемуся сортировке, необходимо уничтожить/воссоздать поддающееся сортировке для создания нового объекта поддающимся сортировке. Там будет много служебным при этом, если список будет иметь много элементов. Я должен был переключиться от script.aculo.us до более легкого MooTools только из-за этого ограничения и закончил тем, что был чрезвычайно доволен тем решением.

MooTools способ сделать недавно добавленный объект поддающимся сортировке справедлив:

sortables.addItems(node);
2
ответ дан 2 December 2019 в 22:39
поделиться

Я пользовался библиотекой Yahoo User Interface, чтобы сделать это прежде:

http://developer.yahoo.com/yui/dragdrop/

2
ответ дан 2 December 2019 в 22:39
поделиться

Хорошо, я сделал еще некоторый обыск и выяснил что-то, что, кажется, главным образом работает.

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.

2
ответ дан 2 December 2019 в 22:39
поделиться

Scriptaculous sortables походит на способ пойти, так как он встроен. http://github.com/madrobby/scriptaculous/wikis/sortable

0
ответ дан 2 December 2019 в 22:39
поделиться

Интерфейс Yahoo был легче, чем я ожидал, имел что-то притягательная работа меньше чем за четыре часа.

1
ответ дан 2 December 2019 в 22:39
поделиться

Мне нравится jQuery http://docs.jquery.com/UI/Sortables

$ (" #myList") .sortable ({});

Необходимо будет написать некоторый код для сохранения его, но это не настолько жестко.

2
ответ дан 2 December 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: