pandas - hy中pandas列设置的宏
问题描述
我觉得我为以下顺序设置几个派生列的操作编写了不必要的函数:
(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
并消除对字符串文字进行引用的需要。$
这是来自这个库的一个简单版本。此外,Hy'ssetv
已经允许您提供多个目标值对。
(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))
推荐阅读
- pandas - 我需要根据两列从 DF 中删除重复项并根据第三列返回带最小值和最大值的行
- android - 如何处理 RecyclerView 中的可变高度图像?
- c++ - 如何从cpp中的函数返回二维数组
- javascript - 使用未知/动态内容高度转换高度的最佳方法?
- r - 从德雷克图形可视化中排除从包中导入的函数?
- twitter-bootstrap - 如何获得此 UI 效果
- node.js - 在另一个系统上确认用户
- google-api - 无法为 GMB 业务订阅发布/订阅推送通知
- cordova - 除了 Google 地图之外,将地图包含到我的 Cordova 项目中的免费替代方案
- r - “选择了未定义的列”错误消息,但 head(data) 显示名称?