关于在 pydatatable 数据框中使用 f 表达式选择必填字段的建议
Recommendation on selection of required fields using f expressions in pydatatable dataframe
我创建了一个数据表框架,
DT_EX = dt.Frame({'sales':[103.07, 47.28, 162.15, 84.47, 44.97, 46.97, 34.99, 9.99, 29.99, 64.98],
'quantity':[6, 2, 8, 3, 3, 3, 1, 1, 1, 2],
'customer_lifecycle_status':['Lead','First time buyer','Active customer','Defecting customer','
'Lead','First time buyer','Lead','Lead','Lead','Lead']})
现在我正在尝试 select 数据表中只有 2 个字段,
DT_EX[:, f.sales, f.quantity]
在这种情况下,它显示的是从数量到销售额的数据,而它应该以指定的顺序(销售额,数量)显示它们。此输出的另一个观察结果是 - 数量字段按升序排序。
撇开这种情况,现在我尝试将括号中的必填字段作为
DT_EX[:, (f.sales,f.quantity)]
这里它现在产生正确的输出,没有任何 sorting/jumbled 个字段
始终建议在括号中传递要 selected 的字段。
最后,我想知道第一种情况是怎么回事?
,请你解释清楚好吗?
数据表的主要语法是
DT[i, j, by, ...]
也就是说,当你在方括号中写一个表达式序列时,第一个被解释为i
(行过滤器),第二个被解释为j
(列select或),第三个为by
(按变量分组)。
通常,您会使用 by()
函数来表达分组依据条件,但旧语法允许在 DT[]
中的第三个位置指定一个裸列名称,并且它是解释为分组依据变量。现在这种用法被认为是不赞成的,最终可能会被删除,但至少现在是这样。
因此,当您编写 DT_EX[:, f.sales, f.quantity]
时,quantity
列被解释为按条件分组(并且由于 j
没有任何缩减操作,它基本上作为种类)。使用分组变量的另一个效果是它被移到结果框架的前面,这实际上意味着您将按照 "opposite" 列出它们的顺序看到列(数量、销售额)。
但是,如果您只需要 select 框架中的 2 列,那么您需要确保这两列都在 j
的参数列表中的位置 DT[...]
。这可以通过列表、元组或字典来完成:
DT_EX[:, [f.sales, f.quantity]]
DT_EX[:, (f.sales, f.quantity)]
DT_EX[:, {"SALES": f.sales, "QUANT": f.quantity}]
我创建了一个数据表框架,
DT_EX = dt.Frame({'sales':[103.07, 47.28, 162.15, 84.47, 44.97, 46.97, 34.99, 9.99, 29.99, 64.98],
'quantity':[6, 2, 8, 3, 3, 3, 1, 1, 1, 2],
'customer_lifecycle_status':['Lead','First time buyer','Active customer','Defecting customer','
'Lead','First time buyer','Lead','Lead','Lead','Lead']})
现在我正在尝试 select 数据表中只有 2 个字段,
DT_EX[:, f.sales, f.quantity]
在这种情况下,它显示的是从数量到销售额的数据,而它应该以指定的顺序(销售额,数量)显示它们。此输出的另一个观察结果是 - 数量字段按升序排序。
撇开这种情况,现在我尝试将括号中的必填字段作为
DT_EX[:, (f.sales,f.quantity)]
这里它现在产生正确的输出,没有任何 sorting/jumbled 个字段
始终建议在括号中传递要 selected 的字段。
最后,我想知道第一种情况是怎么回事? ,请你解释清楚好吗?
数据表的主要语法是
DT[i, j, by, ...]
也就是说,当你在方括号中写一个表达式序列时,第一个被解释为i
(行过滤器),第二个被解释为j
(列select或),第三个为by
(按变量分组)。
通常,您会使用 by()
函数来表达分组依据条件,但旧语法允许在 DT[]
中的第三个位置指定一个裸列名称,并且它是解释为分组依据变量。现在这种用法被认为是不赞成的,最终可能会被删除,但至少现在是这样。
因此,当您编写 DT_EX[:, f.sales, f.quantity]
时,quantity
列被解释为按条件分组(并且由于 j
没有任何缩减操作,它基本上作为种类)。使用分组变量的另一个效果是它被移到结果框架的前面,这实际上意味着您将按照 "opposite" 列出它们的顺序看到列(数量、销售额)。
但是,如果您只需要 select 框架中的 2 列,那么您需要确保这两列都在 j
的参数列表中的位置 DT[...]
。这可以通过列表、元组或字典来完成:
DT_EX[:, [f.sales, f.quantity]]
DT_EX[:, (f.sales, f.quantity)]
DT_EX[:, {"SALES": f.sales, "QUANT": f.quantity}]