df.groupby('z').agg({'x':'sum','y':lambda r: r.reindex(i).sum()})
Вывод:
x y
z
a 6 7
b 15 22
Используйте reindex
, чтобы выбрать только эти индексы из i, затем dropna
, чтобы удалить все эти наны. из-за того, что индексы в я не в дф. Затем groupyby
и agg
:
df.reindex(i).dropna(how='all').groupby('z').agg({'y':'sum'})
или, вам действительно не нужно падать:
df.reindex(i).groupby('z').agg({'y':'sum'})
Вывод:
y
z
a 7.0
b 22.0
Вы также можете проверить ibuffer , он позволяет помечать буферы, с которыми вам нравится работать, с помощью m
, а затем Вы можете выполнить что-то на нем с E
. Также доступны другие общие операции, например запрос-замена
на Q
. Просто посмотрите меню или описание режима ( Chm
).
Кстати, подобные вещи также возможны из dired , хотя, похоже, он не дает eval
команда.
В зависимости от того, какая у вас команда, вы можете сделать:
M-: (mapc (lambda (b) (set-buffer b) (*command*)) (buffer-list))
Но у меня такое чувство, что вы хотите чего-то не такого шепелявого. Взгляните на макросы клавиатуры . А именно, решите, что вы хотите сделать:
C-x ( <do-your-command> C-x )
M-: (mapc (lambda (b) (set-buffer b) (kmacro-end-and-call-macro)) (buffer-list))
Возможно, вы захотите определить эту последнюю часть как функцию, если вы часто ее используете:
(defun bufdo ()
"execute last macro on all buffers, ala bufdo from vi"
(interactive)
(mapc (lambda (b)
(with-current-buffer b
(kmacro-end-and-call-macro)))
(buffer-list)))
Примечание: код не протестирован
Взгляните на список-буферов (функцию). Он возвращает список всех открытых буферов (объекты BUFFER). См. руководство для простого примера использования его с mapcar (который работает с каждым элементом списка и накапливает результаты). Вы, вероятно, также найдете полезным set-buffer, который программно устанавливает текущий буфер из Emacs Lisp.