天天看點

【python資料處理】pandas根據多列連續重複值的總和數量判斷向新一列添加内容

pandas根據多列連續重複值的總和數量判斷向新一列添加内容

  • ​​1 需求​​
  • ​​2 連續重複資料量的判斷​​
  • ​​3 将單條記錄的處理應用到整個檔案中​​
  • ​​4 儲存​​

手動反爬蟲:

1 需求

【python資料處理】pandas根據多列連續重複值的總和數量判斷向新一列添加内容

2 連續重複資料量的判斷

假定s是取值與一條1月-12月份的資料,表現了這12個月份人員貸款的狀态。

s = ['正常','正常','關注','次級','正常','正常','正常','正常','正常','關注','次級','正常']
print(len(s))      

輸出結果如下:(核實為第一條貸款人員12個月的資訊)

【python資料處理】pandas根據多列連續重複值的總和數量判斷向新一列添加内容

對清單中的資料進行周遊,然後根據元素的下标依次進行相鄰位置的判斷,并且要求元素是為“正常”,是以需要添加一個數值累加器,擷取連續重複的次數,代碼如下

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根據多列連續重複值的總和數量判斷向新一列添加内容

3 将單條記錄的處理應用到整個檔案中

讀入檔案,為了友善處理輸出,把問題的合并單元格删除,順便再添加兩條資料進行核實

import pandas as pd

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

輸出結果如下:(此時最後一列資料還是空值)

【python資料處理】pandas根據多列連續重複值的總和數量判斷向新一列添加内容

将對于單條資料處理的過程封裝為函數,應用到整個資料中。

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根據多列連續重複值的總和數量判斷向新一列添加内容

關于f([x[name] for name in data.columns[5:-1]])講解。就是将所有要使用的列名稱添加到清單,構成最初的那個清單,然後pandas是批量進行資料操作,這裡的x就是針對每一條行資料。

4 儲存

直接将data生成為excel檔案即可

【python資料處理】pandas根據多列連續重複值的總和數量判斷向新一列添加内容