python - 将多列中的值汇总到字典中定义的组中

标签 python pandas dictionary

我的设备数据分布在各个 channel 中,这些 channel 分为 3 个独立的组,并由字典定义。现在,我需要从数据集中将列汇总到 3 个独立的组中,就像字典中一样。

输入:

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           0           0           0           0           0           0           0           0           0           0
97          S           0           0           0           0           0           0           0           0           0           0
14          V           0           0           0           0           0           0           0           0           0           0
21          P           0           0           0           0           0           0           0           0           0           0
23          V           0           0           0           0           0           0           0           0           0           0
22          P           0           0           32          76          89          0           0           0           0           0
29          P           0           0           0           0           0           0           0           0           0           0
25          S           0           0           0           0           0           0           0           0           0           0
27          P           0           0           0           0           0           0           0           0           0           0

根据问题的描述,预期输出:

预期输出:

device_id   S   P   V
28          6   74  23
54          0   0   0
97          0   0   0
14          0   0   0
21          0   0   0
23          0   0   0
22          0   197 0
29          0   0   0
25          0   0   0
27          0   0   0

包含映射的字典是:

字典:

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

有人可以帮我解决这个问题吗?

最佳答案

首先,展平并反转您的映射 -

m = {j : k for k, v in d.items() for j in v}
m

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

现在,我们将执行以下操作 -

  • set_indexdevice_id
  • 使用drop摆脱class(因为我们不需要它)
  • 使用之前生成的映射对列名执行重命名操作
  • 对同名列执行 groupby,对列进行求和

df.set_index('device_id')\
  .drop('class', 1)\
  .rename(columns=m)\
  .groupby(axis=1, level=0, sort=False)\
  .sum()

           S    P   V
device_id            
28         6   74  23
54         0    0   0
97         0    0   0
14         0    0   0
21         0    0   0
23         0    0   0
22         0  197   0
29         0    0   0
25         0    0   0
27         0    0   0

关于python - 将多列中的值汇总到字典中定义的组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48048322/

相关文章:

python - 在图的顶层绘制圆圈

python - 如何自定义 django admin 的外观

python - 如何计算数据集上的 TF-IDF?

python - pandas combine_first 与特定的索引列?

c# - 查询嵌套字典

python - 用于性能、缓存的 Numpy 纯函数

python - Twitter 使用 Selenium Python 向下滚动所有帖子

Pandas 评估 : Run method on generated result (e. g。 (A/B).min())

替换字典键和/或值的 Pythonic 方法

python - 修改 Python 字典键