我有一个数据表,
DT_X = dt.Frame({
'issue':['cs-1','cs-2','cs-3','cs-1','cs-3','cs-2'],
'speech':[1,1,1,0,1,1],
'narrative':[1,0,1,1,1,0],
'thought':[0,1,1,0,1,1]
})
它可以被视为,
Out[5]:
| issue speech narrative thought
-- + ----- ------ --------- -------
0 | cs-1 1 1 0
1 | cs-2 1 0 1
2 | cs-3 1 1 1
3 | cs-1 0 1 0
4 | cs-3 1 1 1
5 | cs-2 1 0 1
[6 rows x 4 columns]
我现在对 3 列中的所有值进行分组运算,
DT_X[:,{'speech': dt.sum(f.speech),
'narrative': dt.sum(f.narrative),
'thought': dt.sum(f.thought)},
by(f.issue)]
它产生一个输出,
Out[6]:
| issue speech narrative thought
-- + ----- ------ --------- -------
0 | cs-1 1 2 0
1 | cs-2 2 0 2
2 | cs-3 2 2 2
[3 rows x 4 columns]
在这里,我手动给出了每个字段名称和聚合函数(dt.sum),因为它只需要 3 列我可以轻松执行此任务,但如果我必须处理超过 10、20 等等领域?
你有其他解决方案吗?
参考:我们在 Rdatatable 中具有与以下相同的功能:
DT[,lapply(.SD,sum),by=.(issue),.SDcols=c('speech','narrative','thought')]