比较列表中相同的关键项(而不是字典),以便计算最终结果的相同行项

问题描述 投票:0回答:1

此列表的生成方式来自我创建的 Excel 文档,其中表 1 包含通道编号,表 2 包含通道介于低值和高值之间的瓦数值。试图保留一个列表,并准确定位与 Excel 文档相关的位置。我能找到的唯一方法是从 for 语句中获取并将其作为行号附加到下面的结果中。这恰好是来自通道数的瓦特。我是 python 新手,刚在这里发帖,如果我搞砸了代码以正确发布,请耐心等待。我记得上次我搞砸了很多事情。

[0, 1225, 1, 160, 1, 160, 1, 160, 1, 160, 1, 350, 1, 350, 1, 350, 1, 350, 2, 870, 2, 870, 3, 582, 3, 582, 3, 582, 3, 582, 3, 582, 4, 161, 4, 161, 4, 161, 4, 161, 4, 161, 5, 1225, 6, 870, 6, 870, 7, 1225, 8, 582, 8, 582, 8, 582, 8, 582, 9, 160, 9, 160, 9, 160, 10, 161, 10, 161, 10, 161, 10, 161, 10, 161, 11, 1225, 12, 870, 12, 870, 13, 582, 13, 582, 13, 582, 13, 582, 13, 582, 14, 160, 14, 160, 14, 160, 15, 161, 15, 161, 15, 161, 15, 161, 15, 161, 16, 1225, 17, 1225, 18, 1225, 18, 1225, 19, 160, 19, 160, 19, 160, 19, 350, 19, 350, 19, 350, 19, 350, 20, 160, 20, 870, 20, 870, 21, 582, 21, 582, 21, 582, 21, 582, 21, 582, 22, 161, 22, 161, 22, 161, 22, 161, 22, 161, 24, 870, 24, 1225, 25, 870, 25, 1225, 26, 582, 26, 582, 26, 582, 26, 582, 27, 160, 27, 160, 27, 160, 28, 161, 28, 161, 28, 161, 28, 161, 28, 161, 30, 870, 30, 870, 31, 582, 31, 582, 31, 582, 31, 582, 31, 582, 32, 160, 32, 160, 32, 160, 33, 161, 33, 161, 33, 161, 33, 161, 33, 161, 34, 1225, 34, 1225, 37, 900, 37, 900, 38, 900, 38, 900, 39, 820, 41, 820, 41, 900, 42, 900, 42, 900, 44, 820, 44, 900, 47, 900, 47, 900]

您会注意到这只是一个列表。如果你有办法让我用调查结果创建一本字典,我很想听听。我使用 Pandas 进行比较,得到了上面的列表。我的下一步正如您所注意到的,在 3 位数字之前是一个反映 Excel 文件中同一行的数字。如您所见,1 有 160 和 350 个值。我一直在想出一个循环来迭代列表,也就是说,如果值为 1,则 TotalWatts += 160 += 350 等等。等等。在每一行都会附加另一个列表,即该行的总瓦数。我不确定 pandas 是否是最佳选择,或者是否还有其他更好的选择。第一行的答案是totalLineWatts.append(totalWatts),它将给我一个列表,我将用它来计算excel中该行的安培数,总数为2040。我可以看到我也将做另一个在总瓦特之前附加数字,因为缺少一些行,原因是该行在 Excel 文档中没有通道。因此,如果有人可以向我展示一个如何完成这一步的示例,我将非常感激。

python excel list compare
1个回答
0
投票
import pandas as pd
data_list = [0, 1225, 1, 160, 1, 160, 1, 160, 1, 160, 1, 350, 1, 350, 1, 350, 1, 350, 2, 870, 2, 870, 3, 582, 3, 582, 3, 582, 3, 582, 3, 582, 4, 161, 4, 161, 4, 161, 4, 161, 4, 161, 5, 1225, 6, 870, 6, 870, 7, 1225, 8, 582, 8, 582, 8, 582, 8, 582, 9, 160, 9, 160, 9, 160, 10, 161, 10, 161, 10, 161, 10, 161, 10, 161, 11, 1225, 12, 870, 12, 870, 13, 582, 13, 582, 13, 582, 13, 582, 13, 582, 14, 160, 14, 160, 14, 160, 15, 161, 15, 161, 15, 161, 15, 161, 15, 161, 16, 1225, 17, 1225, 18, 1225, 18, 1225, 19, 160, 19, 160, 19, 160, 19, 350, 19, 350, 19, 350, 19, 350, 20, 160, 20, 870, 20, 870, 21, 582, 21, 582, 21, 582, 21, 582, 21, 582, 22, 161, 22, 161, 22, 161, 22, 161, 22, 161, 24, 870, 24, 1225, 25, 870, 25, 1225, 26, 582, 26, 582, 26, 582, 26, 582, 27, 160, 27, 160, 27, 160, 28, 161, 28, 161, 28, 161, 28, 161, 28, 161, 30, 870, 30, 870, 31, 582, 31, 582, 31, 582, 31, 582, 31, 582, 32, 160, 32, 160, 32, 160, 33, 161, 33, 161, 33, 161, 33, 161, 33, 161, 34, 1225, 34, 1225, 37, 900, 37, 900, 38, 900, 38, 900, 39, 820, 41, 820, 41, 900, 42, 900, 42, 900, 44, 820, 44, 900, 47, 900, 47, 900]
df = pd.DataFrame([data_list[i:i+2] for i in range(0, len(data_list), 2)], columns=['chan', 'watt'])
# print(df)
df_chan = df.groupby("chan").sum()
print(df_chan)

输出

      watt                                                                     
chan                                                                           
0     1225                                                                     
1     2040                                                                     
2     1740                                                                     
3     2910                                                                     
... ...                                                                   
42    1800                                                                     
44    1720                                                                     
47    1800    
© www.soinside.com 2019 - 2024. All rights reserved.