Python:总和匹配列

时间:2017-10-19 06:41:49

标签: python csv

输入文件

10/14/2017 21:02  11/04/2017      134  15  
10/14/2017 21:02  11/04/2017      134  15  
10/14/2017 21:02  11/04/2017      134  15   
10/13/2017 20:58  11/03/2017      132  10  
10/13/2017 20:58  11/03/2017      132  10   
10/13/2017 20:58  11/03/2017      132  10  
10/13/2017 20:58  11/03/2017      132  10 

我想将输出作为第5列中值的总和,以匹配第1列中的值。

10/14/2017   45          //(ie. 15+15+15)   
10/13/2017   40          //(ie. 10+10+10+10)

有人可以帮我解决Python代码吗?

4 个答案:

答案 0 :(得分:1)

您可以使用 saveChangesModal() { this.yourVarToUpdateOne.name = this.itemName, this.yourVarToUpdateTwo.id = this.itemId, this.yourVarToUpdateTwo.description : this.itemDescription //some your functions } 中的defaultdict

collections

答案 1 :(得分:1)

解决这类问题的好方法是尝试将其分解为子问题并分别解决每个问题。此问题的细分可能是:

  1. 如何提取输入文件中每行的内容?想想每个栏目的区别。
  2. 如何为第0列中的每个值存储第5列的运行总计?您需要某种数据结构,最好能够快速查找第0列值的总数。
  3. 当我完成时,如何将这些总计和第0列值写入我的输出文件?
  4. 我会鼓励你在找人给你代码之前继续自己解决问题。

答案 2 :(得分:0)

data = """10/14/2017 21:02  11/04/2017      134  15
10/14/2017 21:02  11/04/2017      134  15
10/14/2017 21:02  11/04/2017      134  15
10/13/2017 20:58  11/03/2017      132  10
10/13/2017 20:58  11/03/2017      132  10
10/13/2017 20:58  11/03/2017      132  10
10/13/2017 20:58  11/03/2017      132  10
"""

result = {}

for line in data.splitlines():
    key = line.split(' ')[0]
    value = line.split(' ')[11]
    if result.get(key):
        result[key] = result[key] + int(value)
    else:
        result[key] = int(value)
print(result)

答案 3 :(得分:-1)

假设第1列中的日期是连续的,您可以逐行读取CSV,如果日期与上一个日期相同,则从该行添加第5列以保持运行总计。如果日期不同,则输出总数,并在下一个日期从零开始重新计算。