如何按字典分组规则对多列设备数据进行求和聚合?
没问题,我来帮你搞定这个需求!用Python的Pandas库就能轻松实现,下面是具体的代码示例和详细解释:
完整实现代码
import pandas as pd # 构造输入数据集(如果是从文件读取,替换成pd.read_csv/Excel即可) data = { 'device_id': [28,54,97,14,21,23,22,29,25,27], 'class': ['S','P','S','V','P','V','P','P','S','P'], 'Channel A': [2,0,0,0,0,0,0,0,0,0], 'Channel B': [4,0,0,0,0,0,0,0,0,0], 'Channel C': [23,0,0,0,0,0,32,0,0,0], 'Channel D': [45,0,0,0,0,0,76,0,0,0], 'Channel E': [6,0,0,0,0,0,89,0,0,0], 'Channel F': [6,0,0,0,0,0,0,0,0,0], 'Channel G': [8,0,0,0,0,0,0,0,0,0], 'Channel H': [9,0,0,0,0,0,0,0,0,0], 'Channel I': [0,0,0,0,0,0,0,0,0,0], 'Channel J': [0,0,0,0,0,0,0,0,0,0] } df = pd.DataFrame(data) # 定义分组规则字典(修正了原字典中" Channel J"的空格问题,避免列名匹配失败) group_dict = { 'S': ['Channel A','Channel B'], 'P': ['Channel C','Channel D','Channel E'], 'V': ['Channel F','Channel G','Channel H','Channel I','Channel J'] } # 按分组规则计算每行的求和结果 for group_name, channels in group_dict.items(): df[group_name] = df[channels].sum(axis=1) # 提取需要的列,生成最终输出格式 output_df = df[['device_id', 'S', 'P', 'V']] print(output_df)
代码解释
- 数据导入/构造:这里我把你给出的输入数据直接构造成了字典,转换成Pandas的DataFrame。如果你的数据是存储在CSV/Excel文件里,只需要把这部分换成
pd.read_csv("你的文件路径")或者pd.read_excel("你的文件路径")即可。 - 分组规则处理:我修正了原分组字典中
V分组里的" Channel J"(前面多了一个空格),确保列名能准确匹配,避免求和出错。 - 分组求和:遍历分组字典,对每个分组对应的通道列执行按行求和(
axis=1表示横向求和),并将结果存储为新的列(S、P、V)。 - 输出格式整理:最后筛选出
device_id和三个分组的求和列,得到和你期望完全一致的输出结果。
运行结果
执行代码后,你会得到如下输出:
device_id S P V 0 28 6 74 23 1 54 0 0 0 2 97 0 0 0 3 14 0 0 0 4 21 0 0 0 5 23 0 0 0 6 22 0 197 0 7 29 0 0 0 8 25 0 0 0 9 27 0 0 0
内容的提问来源于stack exchange,提问作者Shuvayan Das
相关产品推荐
相关产品推荐

