最近在用clojure进行数据分析, 想要一个pandas中的agg运算.(也就是所谓的针对map中键值的运算) 干脆就采用对矩阵某一列传匿名函数的形式进行处理了.
弄了个替代品,
(defn group-by-reduce [func target-map]
(zipmap (keys target-map)
(->>
target-map
vals
(map func))))
用起来大概像这个样
(->> all-order-list
(group-by #(get % :order_detail_id))
(group-by-reduce
(fn [coll]
;; 销售订单下生产任务编号
[;;
(->> coll (map #(get % :notice_id) count ))
;; 客户名称
(->> coll (map #(get % :custom_name)) (apply max) ])))
这东西大概等价于python下的 dfagg = df.groupby('order_detail_id').agg(['count', 'max'])
好吧 ,其实差别挺大的.
不过好处就是, 基本上可以搞任何自己想要搞的小动作.而且可以针对某一列单独选择匿名函数来处理, 连带清洗等逻辑都可以放在->>宏里解决,