【问题标题】:keep track of increment and decrement of values in python tuple跟踪python元组中值的增量和减量
【发布时间】:2019-11-17 12:49:25
【问题描述】:

我有一个如下列表,

list_ = [('a', 5), ('a', 6), ('a', 8), ('a', 2), ('a', 5), ('a', 9), ('a', 10),
             ('b', 3), ('b', 7), ('b', 6), ('b', 2), ('b', 6), ('b', 5), ('b', 10)]

我想做下面的操作。 如果元组中的值增加,我必须跟踪增量,如果它减少,我必须跟踪减量,最后我需要两者的总和。

# for key 'a' for example
# increment      decrement
#       1             6
#       2
#       3
#       4
#       1
# Hence total increment is 11 and decrement is 6
# so I need the result like this. ('a', (11, 6))

例如,我这样做是为了获得增量,但没有工作。

from collections import defaultdict

d = defaultdict(list)
for k, v in list_:
    d[k].append(v)

counter1 = 0

for key, value in d.items():
  for i in range(len(value)):
    try:
      if value[i] < value[i+1]:
        s = value[i+1] - value[i]
        counter1 +=s
    except:
      pass


print(counter1)

【问题讨论】:

    标签: python arrays python-3.x list tuples


    【解决方案1】:
    def incdec(lst):
        d = {}
        for k, v in lst:
            try:
                last = d[k]
            except KeyError:
                d[k] = [0, 0, v]
            else:
                delta = v - last[2]
                last[2] = v
                last[delta < 0] += abs(delta)
        return [(k, (v[0], v[1])) for k, v in d.items()]
    

    它适用于可迭代的lst(不收集数据,只记住增量和减量,而不是整个数据)。

    d 是临时列表的字典,其中 [0] 为递增,[1] 递减 [2] 最后一个值。

    last[delta &lt; 0] 是一个技巧,因为bool 有点像int,那么在这种情况下,您可以寻址 [0] (inc) 或 [1] (dec)。我知道,它不太可读。你可以改成if / else

    最后一行以所需格式返回数据(inc 和 dec,不带 [2] – 最后一个值)。

    【讨论】:

      【解决方案2】:
      df = pd.DataFrame([('a', 5), ('a', 6), ('a', 8), ('a', 2), ('a', 5), ('a', 9), ('a', 10),
                   ('b', 3), ('b', 7), ('b', 6), ('b', 2), ('b', 6), ('b', 5), ('b', 10)], columns=['col1','col2'])
      
      
      for value,tmp_df  in df.groupby('col1'):
      
          increase = tmp_df['col2']-tmp_df['col2'].shift(1)
          positive = increase[increase>0].sum()
          negative = increase[increase<0].sum()
          print ((value, (positive, negative)))
      

      【讨论】:

      • 对数据框的创造性使用很好,但我认为 OP 想要abs(negative)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 2017-01-05
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多