gpt4 book ai didi

python - 如何计算 Pandas 数据框中值不为零的列数

转载 作者:太空宇宙 更新时间:2023-11-04 00:23:48 26 4
gpt4 key购买 nike

我有以下数据:

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

channel 按照我在字典中定义的映射分组出现,如下所示:

字典:

di = {              
'S' : ['Channel A','Channel B'],
'P' : ['Channel C','Channel D','Channel E'],
'V' : ['Channel F','Channel G','Channel H','Channel I',' Channel J']
}

我需要从 pandas 数据帧中按行计算每个设备下正在观看的 channel 数。

预期输出:

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

解释:

  1. mask 将为您提供一个包含 bool 值的数据框,其值不等于零为真,其余为假。我们将设备和类设置为索引,因此不会考虑它们。

  2. 展开字典中的列表,以便我们可以根据键对列进行分组 {i:k for k,v in di.items() for i in v}


{ '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' }
  1. Groupby 轴 1,然后求和。

  2. 为列添加前缀并重置索引。

关于python - 如何计算 Pandas 数据框中值不为零的列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48144466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com