Python 如何获取数据帧中值不是零行的列数计数
我有以下数据:Python 如何获取数据帧中值不是零行的列数计数,python,pandas,count,Python,Pandas,Count,我有以下数据: device_id class Channel A Channel B Channel C Channel D Channel E Channel F Channel G Channel H Channel I Channel J 28 S 2 4 23 45 6 6 8
device_id class Channel A Channel B Channel C Channel D Channel E Channel F Channel G Channel H Channel I Channel J
28 S 2 4 23 45 6 6 8 9 0 0
54 P 34 56 21 0 76 45 0 0 0 0
97 S 24 45 76 0 0 35 76 87 6 20
22 V 0 0 32 76 89 0 0 0 0 0
根据我在字典中定义的映射,通道成组出现,如下所示:
字典:
di = {
'S' : ['Channel A','Channel B'],
'P' : ['Channel C','Channel D','Channel E'],
'V' : ['Channel F','Channel G','Channel H','Channel I',' Channel J']
}
我需要从熊猫数据帧按行计算每个设备下观看的频道数
预期产出:
device_id class Channels_S Channels_P Channels_V
28 S 2 3 3
54 P 2 2 1
97 S 2 1 5
22 V 0 3 0
有人能给我介绍一下吗?这里有一个技巧你可以使用:
mask = df.set_index(['device_id','class']) != 0
d1 = mask.groupby({i:k for k,v in di.items() for i in v},axis=1).sum()
ndf = d1.add_prefix('Channel_').reset_index()
device_id class Channel_P Channel_S Channel_V
0 28 S 3.0 2.0 3.0
1 54 P 2.0 2.0 1.0
2 97 S 1.0 2.0 5.0
3 22 V 3.0 0.0 0.0
说明:
mask
将为您提供一个数据帧,其中布尔值不等于零true,其余为false。我们将设备和类设置为索引,因此不会考虑它们{i:k代表k,v在di.items()代表i在v}
令人惊叹的。谢谢!Shuvayan Das我很高兴,如果它很好,别忘了向上投票。@Dark抱歉,但是
di
属于哪个目录?我没有看到任何di
dict要在上面应用di.items()
?@ChihebNexus Op没有给他的dict命名,所以我想到了一个名字。好吧:-)我现在明白了。顺便说一句,回答得很好。
{ 'Channel_F': 'V', 'Channel_J': 'V', 'Channel_E': 'P',
'Channel_G': 'V', 'Channel_D': 'P', 'Channel_B': 'S',
'Channel_I': 'V', 'Channel_A': 'S', 'Channel_C': 'P',
'Channel_H': 'V' }