群主突然问了我一个非常奇怪的问题:
我有一个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()
但我觉得这样其实也挺沙雕的:
Comments | NOTHING