1

我有一个数据表,

DT_EX= dt.Frame({
               'country':['a','a','a','a'],
               'id':[3,3,3,3],
               'shop':['dmart','dmart','dmart','dmart'],
               'beef':[23,None,None,None],
               'eggs':[None,33,None,None],
               'fork':[None,None,10,None],
               'veg':[None,None,None,40]})

它的输出如下,

在此处输入图像描述

我想将其转换为列中不应包含 NA 的数据表,如此输出所示,

在此处输入图像描述

您能否解释一下如何在 py-datatable 上执行此操作(删除 NA)?dt.isna() 在这种情况下会有所帮助吗?

4

2 回答 2

2

一种解决方法是选择前三列(它们没有空值)并用剩余列的总和对其进行扩展:link

from datatable import f, first, sum

DT_EX[:,first(f[:3]).extend(sum(f[3:]))]

    country id  shop    beef    eggs    fork    veg
▪▪▪▪    ▪▪▪▪    ▪▪▪▪    ▪▪▪▪▪▪▪▪    ▪▪▪▪▪▪▪▪    ▪▪▪▪▪▪▪▪    ▪▪▪▪▪▪▪▪
0   a   3   dmart   23  33  10  40

更新:来自另一个相关问题的更简单的解决方案:

DT_EX[:, sum(f[3:]), f[:3])]
于 2020-05-23T13:26:38.160 回答
1

所以我还有一个项目子组,这是一个新的 DT。

DT_EX= dt.Frame({
'country':['a','a','a','a','b','b','c','c'],
'id':[3,3,3,3,4,4,4,4],
'shop':['dmart','dmart','dmart','dmart','amzn','amzn','amzn','amzn'],
'beef':[23,None,None,None,93,None,None,None],
'eggs':[None,33,None,None,None,103,None,None],
'fork':[None,None,10,None,None,None,210,None],
'veg':[None,None,None,40,None,None,None,340]})

我已尝试在其上应用推荐的逻辑,如随附的屏幕截图中所示,

在此处输入图像描述

在第二个代码块中,它总结了每一列(牛肉、鸡蛋、叉子、蔬菜)

在第三个代码块中,我对前三列进行了分组,在这里它给出了正确的输出,但它添加了重复的列,另一个观察是它用 0 填充 NA 值,它可以在 C 观察中找到。

你有什么其他的想法/建议吗?

于 2020-05-23T15:37:42.970 回答