pandas根据多列连续重复值的总和数量判断向新一列添加内容

手动反爬虫:


1 需求

【python数据处理】pandas根据多列连续重复值的总和数量判断向新一列添加内容_多列

2 连续重复数据量的判断

假定s是取值与一条1月-12月份的数据,表现了这12个月份人员贷款的状态。

s = ['正常','正常','关注','次级','正常','正常','正常','正常','正常','关注','次级','正常']
print(len(s))

输出结果如下:(核实为第一条贷款人员12个月的信息)

【python数据处理】pandas根据多列连续重复值的总和数量判断向新一列添加内容_多列_02

对列表中的数据进行遍历,然后根据元素的下标依次进行相邻位置的判断,并且要求元素是为“正常”,所以需要添加一个数值累加器,获取连续重复的次数,代码如下

num = 0
for i,j in enumerate(s):
try:
if j == '正常' and s[i] == s[i+1]:
num += 1
except:
pass
print(num)

输出结果如下:(判断“正常”连续重复元素共5次,与实际情况相符)

【python数据处理】pandas根据多列连续重复值的总和数量判断向新一列添加内容_python_03

3 将单条记录的处理应用到整个文件中

读入文件,为了方便处理输出,把问题的合并单元格删除,顺便再添加两条数据进行核实

import pandas as pd

data = pd.read_excel(r'C:\Users\86177\Desktop\问题.xlsx')

输出结果如下:(此时最后一列数据还是空值)

【python数据处理】pandas根据多列连续重复值的总和数量判断向新一列添加内容_python_04

将对于单条数据处理的过程封装为函数,应用到整个数据中。

def f(s):
num = 0
for i,j in enumerate(s):
try:
if j == '正常' and s[i] == s[i+1]:
num += 1
except:
pass

return '正常' if num>=5 else '异常'


data['是否正常'] = data.apply(lambda x: f([x[name] for name in data.columns[5:-1]]),axis=1)

输出结果如下:(函数中添加了一个条件判断,如果连续出现的数值超过5就标记为正常,否则就是一场,然后pandas中多列处理时候需要指定axis=1)

【python数据处理】pandas根据多列连续重复值的总和数量判断向新一列添加内容_多列_05

关于f([x[name] for name in data.columns[5:-1]])讲解。就是将所有要使用的列名称添加到列表,构成最初的那个列表,然后pandas是批量进行数据操作,这里的x就是针对每一条行数据。

4 保存

直接将data生成为excel文件即可

【python数据处理】pandas根据多列连续重复值的总和数量判断向新一列添加内容_判断_06

打开文件界面如下(完美解决问题)

【python数据处理】pandas根据多列连续重复值的总和数量判断向新一列添加内容_多列_07