pandas根據多列連續重複值的總和數量判斷向新一列添加内容
- 1 需求
- 2 連續重複資料量的判斷
- 3 将單條記錄的處理應用到整個檔案中
- 4 儲存
手動反爬蟲:
1 需求
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SM2ADO3QWZ0I2N3UTN5I2YyYzX3IzMxETMxEzLcdDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
2 連續重複資料量的判斷
假定s是取值與一條1月-12月份的資料,表現了這12個月份人員貸款的狀态。
s = ['正常','正常','關注','次級','正常','正常','正常','正常','正常','關注','次級','正常']
print(len(s))
輸出結果如下:(核實為第一條貸款人員12個月的資訊)
對清單中的資料進行周遊,然後根據元素的下标依次進行相鄰位置的判斷,并且要求元素是為“正常”,是以需要添加一個數值累加器,擷取連續重複的次數,代碼如下
num = 0
for i,j in enumerate(s):
try:
if j == '正常' and s[i] == s[i+1]:
num += 1
except:
pass
print(num)
輸出結果如下:(判斷“正常”連續重複元素共5次,與實際情況相符)
3 将單條記錄的處理應用到整個檔案中
讀入檔案,為了友善處理輸出,把問題的合并單元格删除,順便再添加兩條資料進行核實
import pandas as pd
data = pd.read_excel(r'C:\Users\86177\Desktop\問題.xlsx')
輸出結果如下:(此時最後一列資料還是空值)
将對于單條資料處理的過程封裝為函數,應用到整個資料中。
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)
關于f([x[name] for name in data.columns[5:-1]])講解。就是将所有要使用的列名稱添加到清單,構成最初的那個清單,然後pandas是批量進行資料操作,這裡的x就是針對每一條行資料。
4 儲存
直接将data生成為excel檔案即可