hy 中 pandas 列设置的宏
macro for pandas column setting in hy
我觉得我在为以下顺序设置多个派生列的操作编写不必要的函数:
(defn add-cols[d]
(do
(setv (get d "col0") "0")
(setv (get d "col1") (np.where (> 0 (get d "existing-col")) -1 1))
(setv (get d "col2") (* (get d "col1") (get d "existing-col")))
d
))
以上内容既不简洁也不容易理解。对于将此模式转换为宏的任何帮助,我将不胜感激。我是宏的初学者,但我正在考虑创建这样的东西:
(pandas-addcols d
`col0 : "0",
`col1 : (np.where ( > 0 `existing-col) -1 1),
`col2 : (* `col1 `existing-col))
如有任何帮助或指导,我们将不胜感激。宏的最终形式显然也可以不同。最终,最重复的一点是多次“setv”和“get”调用,也许有更优雅的通用方法来删除这些调用。
一个小的语法糖可以提供帮助,就是为 get
使用一个较短的名称,并且不需要引用字符串文字。这是来自 this library 的 $
的简单版本。此外,Hy 的 setv
已经允许您提供多个目标值对。
(import
[numpy :as np]
[pandas :as pd])
(defmacro $ [obj key]
(import [hy [HyString]])
`(get (. ~obj loc) (, (slice None) ~(HyString key))))
(setv
d (pd.DataFrame (dict :a [-3 1 3] :b [4 5 6]))
($ d col0) 0
($ d col1) (np.where (> 0 ($ d a)) -1 1))
我觉得我在为以下顺序设置多个派生列的操作编写不必要的函数:
(defn add-cols[d]
(do
(setv (get d "col0") "0")
(setv (get d "col1") (np.where (> 0 (get d "existing-col")) -1 1))
(setv (get d "col2") (* (get d "col1") (get d "existing-col")))
d
))
以上内容既不简洁也不容易理解。对于将此模式转换为宏的任何帮助,我将不胜感激。我是宏的初学者,但我正在考虑创建这样的东西:
(pandas-addcols d
`col0 : "0",
`col1 : (np.where ( > 0 `existing-col) -1 1),
`col2 : (* `col1 `existing-col))
如有任何帮助或指导,我们将不胜感激。宏的最终形式显然也可以不同。最终,最重复的一点是多次“setv”和“get”调用,也许有更优雅的通用方法来删除这些调用。
一个小的语法糖可以提供帮助,就是为 get
使用一个较短的名称,并且不需要引用字符串文字。这是来自 this library 的 $
的简单版本。此外,Hy 的 setv
已经允许您提供多个目标值对。
(import
[numpy :as np]
[pandas :as pd])
(defmacro $ [obj key]
(import [hy [HyString]])
`(get (. ~obj loc) (, (slice None) ~(HyString key))))
(setv
d (pd.DataFrame (dict :a [-3 1 3] :b [4 5 6]))
($ d col0) 0
($ d col1) (np.where (> 0 ($ d a)) -1 1))