首页 > 解决方案 > 汇总矩阵中的每个列值

问题描述

这是数据。

 day_value = {
        'android':[1,0,0,0,0,0,1],
         'iphone':[0,1,0,1,0,0,0],
            'web':[0,1,1,0,1,0,0],
     }


device_rollup = {
    'overall':['iphone','android','web'],
     'mobile':['iphone','android'],
 }

rollup_l7 = {
    'overall': 6,
     'mobile': 4,
 }

如果每一列的值都相同,我们必须将其汇总为 1 而不是将其相加。总数应为 6 ((1,0,0)+(0,1,1)+(0,0,1)+(0,1,0)+ (0,0,1)+ (1 ,0,0)-> 1+1+1+1+1+1 =6)

现在我可以像这样把所有的值加起来。

overall_val = sum(sum(v) for k,v in day_value.items() if k in device_rollup['overall'] )
mobile_val = sum(sum(v) for k,v in day_value.items() if k in device_rollup['mobile'] )

rollup_l7= {'overall':overall_val, 'mobile':mobile_val}
print(rollups_l7)

但是,我不想加起来,而是想汇总每个柱状值。

我们是否需要将列表转换为二进制然后再转换回整数?

我不太确定如何在不使用 numpy 的情况下在常规 python 中实现

标签: pythonpandasrollup

解决方案


我想我找到了答案。

overall = sum([x | y | z  for x,y,z in zip(day_value['android'], day_value['iphone'],day_value['web'])])
mobile = sum([x | y for x,y in zip(day_value['android'], day_value['iphone'])])

rollup_l7 = {'overall':overall, 'mobile':mobile}
print(rollup_l7)

推荐阅读