首页 > 解决方案 > 遍历字典,引用键

问题描述

我正在尝试遍历字典,但在计算中使用循环键(或我选择的值)。

编辑 11/24:添加额外的上下文

所以这个例子是:

步骤 1) 我有一个包含以下列的 CSV 文件... 第 1 列、第 2 列、第 3 列

file = pd.read_csv("/Path/test.csv")

time   Change    Column 1   Column 2   Column 3   Column 4
01/01    .5          3          5          7         1
01/01    .3          5          1          4         2
01/01    .5          1          3          8         2
01/02    .3          5          1          4         1
01/02    .5          1          3          8         3

第 2 步)我有一个字典,对这些列进行分组,并提供有关键值对中列所需计算的信息。我还为每列分配了一个代码以供以后使用(注意:有 10 组列,每组包含 4-20 列,下面只是一个示例):

dict = {
'group': {
    'a':{
       'ranges':{
             'a':{'<':0,'>':-1},
             'b':{'<':0,'>':-2}} 
       'indicators':{
             'a':'Column 1',
             'b':'Column 2'}
    'b':{
       'ranges':{
             'a':{'<':0,'>':-1},
             'b':{'<':0,'>':-2}} 
       'indicators':{
             'a':'Column 3',
             'b':'Column 4'}

第 3 步[这是我遇到麻烦的地方])“组”是具有“相似”数据以及我想要测试的相应范围的列的集合。我正在尝试将不同的组组合与其他组进行比较。因此,将第 1 列的所有不同范围与第 3 列的所有不同范围进行比较,然后是 4……然后将第 2 列的所有不同范围与第 3 列的所有不同范围进行比较,然后是 4。我的想法是分配一个基于 GROUP、RANGE 和 INDICATORS 的相应字母的代码......例如,“aaa”将是 GROUP a,RANGES {'<':0,'>':-1},在 INDICATOR Column 1

注意:我一次只需要比较 3 列,例如循环可以在 3 个组合处停止,但是我也想知道 2 个组合是否比 3 个更好。

第 4 步)我想通过计算每个组合的平均值、最大值、最小值和计数来对不同的组合进行分组,以查看哪些列和范围的组合效果最好。

我正在尝试为此创建一个巨大的循环,但为了自学,我只是询问社区的一部分。但我看到这种零碎的方法对理解我的问题的背景没有帮助。所以希望这个额外的解释能提供更多的清晰度

我最终想要的输出:

Code   Average   Max   Min   Count
aaa    0.25      0.5   0.3   3
aab    0.25      0.5   0.3   3
aac    0.25      0.5   0.3   3
aba    0.25      0.5   0.3   3
abb    0.25      0.5   0.3   3
abc    0.25      0.5   0.3   3

标签: pythondataframe

解决方案


如果我理解正确,您想将运算符的字符串表示形式转换为可以应用于字典中的值的运算符(对吗?)在这种情况下,例如,您可以定义映射符号的字典到模块中的相应运算符operator

import operator
ops = {'<': operator.lt,
       '<=': operator.le,
       '=': operator.eq,
       '>': operator.gt,
       '>=': operator.ge,
       '!=': operator.ne
      }

然后通过它的符号接收这个运算符sops[s]例如

s= '<'
ops[s](1, 2)  # evaluates to True

推荐阅读