群主突然问了我一个非常奇怪的问题:

我有一个Excel,我现在想,如果一列有连续12行不是空值,就把它们求和,我该怎么做?

我只知道群主是一家药企的财务经理助理(管培生?),平时需要帮助处理一些报表什么的,但我实在没想出来在什么情景下才会遇到到这种问题。

虽然解决问题的思路很清晰,似乎用VBA就可以轻松解决,但作为一个连Excel的普通函数都记不全的我,又怎么会用VBA呢。

不过也许我可以用Python试试。

也许是出于保护公司隐私的目的,群主并没有把原表格给我,我也不清楚她的具体要求是什么,就随便拿一个表格试试:

http://static.imtrq.com/tools/1.xls

这是我随便建立的一个Excel,里面的数据没有实际意义,只是把一些连续的数据挖掉几个数值,来模拟一下群主说的情景。

然后是我尝试写出的Python代码:

 1import pandas as pd
2#读取Excel
3data = pd.read_excel('1.xls', header=None)
4#用数字0填补空值
5data = data.fillna(0)
6#初始化计数
7count = 0
8#从第一行开始计数
9start = 0
10for index in range(len(data)):
11    #如果某一行不是空值,则计数+1
12    if data.iloc[index,1] != 0:
13        count += 1
14        #如果遇到连续12个非空行,打印它们的和
15        if count % 12 == 0:
16            print(data.iloc[start:start+count,1].sum())
17            #重置计数,从下一行开始计数
18            count = 0
19            start = index +1
20    #如果遇到空行,则重置计数,从下一行开始计数
21    else:
22        count = 0
23        start = index+1

虽然我觉得直接print出来有点不靠谱,但我不清楚具体的要求,也不知道应该把求和的结果放在哪,要不再新建一列?

1import numpy as np
2data['sum_column'] = np.zeros(len(data))

然后把上面的print改成赋值:

1data.iloc[start:start+count,2] = data.iloc[start:start+count,1].sum()

但我觉得这样其实也挺沙雕的: