我有一个DataFrame,其索引称为city_id格式中的城市[city],[state](例如,new york,ny列中包含整数计数.问题是我有同一个城市的多行,我想city_id通过添加列值来折叠共享a的行我看了看groupby()但是如何将它应用于这个问题并不是很明显.
编辑:
一个例子:我想改变这个:
city_id val1 val2 val3
houston,tx 1 2 0
houston,tx 0 0 1
houston,tx 2 1 1
Run Code Online (Sandbox Code Playgroud)
进入这个:
city_id val1 val2 val3
houston,tx 3 3 2
Run Code Online (Sandbox Code Playgroud)
如果有~10-20k行.
我不是指闭包,外部函数返回内部函数,或者特别是memoization.有几个实例我想写一个递归函数,也许有memoization,并且在外部函数中初始化字典或其他一些数据结构似乎更简单,然后有一个递归的辅助函数写入和访问dict和外部函数的参数.这就是我的意思 -
def foo(arr, l):
cache = {}
result = []
def recursive_foo_helper(i, j, k):
# some code that depends on arr, l, i, j, k, cache, and result
for (x, y) in arr:
if recursive_foo_helper(x, y, k):
return result
return None
Run Code Online (Sandbox Code Playgroud)
而不是使用一些超长签名分别声明辅助函数,
recursive_foo_helper(arr, l, i, j, k, cache={}, result=[])
Run Code Online (Sandbox Code Playgroud)
我已经读过,这样做对于memoization来说是非常标准的,但是我很好奇是否对于递归辅助函数是否可行是一致的.
当我使用 Quicklisp ( (ql:quickload "iterate"))加载“迭代”包时,它似乎加载良好,但没有一个功能真正起作用。当我输入时(iterate:iter (for i from 0 to 10) (collect i)),我收到一条错误消息,说“我的变量未绑定”,还有几个样式警告说 COLLECT 和 FOR 是未定义的函数,而 FROM 是未定义的变量。如果我尝试使用 ITER 或 ITERATE 而不是 ITERATE:ITER,也会发生同样的事情。我正在使用 SBCL。
我想把把大于2的列表中的所有项目的操作放入J中的无意义(如未明确地捕获变量中的参数)函数中.我想通过使用~钩子来做这个,比如f =: ((> & 2) #)~但似乎既不是也不行((> & 2) #~).
我的理由是,我的函数的形式(f y) g y,其中y是列表,f是(> & 2)和g是#.我将不胜感激任何帮助!
我刚刚开始学习Lisp,我正在解决一些Project Euler问题.我被困在那个你将偶数斐波那契数字加到最大数字之下的那个.我尝试过的事情如下.我读过这篇文章,但我仍然不确定为什么我的方法都不起作用!
CL-USER> (defun sum-even-fibs (max)
(do ((curr 0 next)
(next 1 (+ curr next))
(sum 0 (if (evenp curr) (+ sum curr))))
((> max curr) sum)))
SUM-EVEN-FIBS
CL-USER> (sum-even-fibs 10)
0
CL-USER> (defun sum-even-fibs (max)
(let ((sum 0))
(do ((curr 0 next)
(next 1 (+ curr next)))
((> max curr))
(if (evenp curr)
(setq sum (+ sum curr))))
(format t "~d" sum)))
SUM-EVEN-FIBS
CL-USER> (sum-even-fibs 10)
0
NIL
Run Code Online (Sandbox Code Playgroud) 我正在编写一个递归的Lisp宏,它接受一个数字n并对身体进行n次评估(来自ANSI Lisp的练习).我已经尝试了两种方法 - 在扩展中使用宏调用,并将宏扩展为本地递归函数.两者都不能像我想要的那样工作.
这是第一个 - 它有一个堆栈溢出,但是当我使用macroexpand-1查看它的扩展时,我似乎很好.
(defmacro n-times (n &rest body)
(let ((i (gensym)))
`(let ((,i ,n))
(if (zerop ,i) nil
(progn
,@body
(n-times (- ,i 1) ,@body))))))
Run Code Online (Sandbox Code Playgroud)
这是第二个 - 它出错了,"未定义函数#xxxx用参数(z)调用",其中#xxxx是gensym的名称,z比我调用它的数字少1.我认为我使用gensyms和flet的方式存在问题,但我不确定如何正确地执行此操作.
(defmacro n-times (n &rest body)
(let ((g (gensym)))
`(flet ((,g (x)
(if (zerop x) nil
(progn
,@body
(,g (- x 1))))))
(,g ,n))))
Run Code Online (Sandbox Code Playgroud) 我正在阅读Practical Common Lisp,我正在玩REPL中的闭包(第6章).我正在尝试下面的代码,我认为这是一个闭包列表,但我无法弄清楚如何在REPL同时调用所有这些代码:
(defparameter *fn*
(let ((count 10))
(list
#'(lambda () (incf count))
#'(lambda () (decf count))
#'(lambda () count))))
Run Code Online (Sandbox Code Playgroud)
我已经阅读了这个问题的答案,并尝试了一些和其他一些,但似乎没有任何工作.这是我尝试过的 -
CL-USER> (apply #'funcall *fn*)
; Evaluation aborted on #<CCL::TOO-MANY-ARGUMENTS #x2100B8890D>.
CL-USER> (funcall *fn*)
; Evaluation aborted on #<TYPE-ERROR #x2100B5667D>.
CL-USER> (loop for function in *fn*
(collect (funcall function)))
; Evaluation aborted on #<CCL::SIMPLE-PROGRAM-ERROR #x2100C21D4D>.
CL-USER> (map #'funcall *fn*)
; Evaluation aborted on #<CCL::TOO-FEW-ARGUMENTS #x2100B7320D>.
Run Code Online (Sandbox Code Playgroud)
我正在寻找的东西将打印出来(11 9 10).
谢谢你的帮助!