首页 > 解决方案 > 跟踪python元组中值的增量和减量

问题描述

我有一个如下列表,

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)

标签: pythonarrayspython-3.xlisttuples

解决方案


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)))

推荐阅读