99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)大數(shù)據(jù)時(shí)代【CDA干貨】Pandas 多列條件篩選:從基礎(chǔ)語(yǔ)法到實(shí)戰(zhàn)應(yīng)用
【CDA干貨】Pandas 多列條件篩選:從基礎(chǔ)語(yǔ)法到實(shí)戰(zhàn)應(yīng)用
2025-08-12
收藏

Pandas 多列條件篩選:從基礎(chǔ)語(yǔ)法到實(shí)戰(zhàn)應(yīng)用

在數(shù)據(jù)分析工作中,基于多列條件篩選數(shù)據(jù)是高頻需求。無(wú)論是提取滿足特定業(yè)務(wù)規(guī)則的樣本,還是清洗異常數(shù)據(jù),Pandas 都提供了靈活高效的多條件處理機(jī)制。本文將系統(tǒng)梳理多列條件篩選的語(yǔ)法規(guī)則、進(jìn)階技巧與實(shí)戰(zhàn)案例,幫助數(shù)據(jù)從業(yè)者掌握精準(zhǔn)數(shù)據(jù)提取的核心能力。

一、多列條件篩選的核心價(jià)值

多列條件篩選本質(zhì)是通過(guò)組合多個(gè)字段的邏輯規(guī)則,從 DataFrame 中提取目標(biāo)子集。在實(shí)際業(yè)務(wù)中,這種操作無(wú)處不在:電商場(chǎng)景中篩選 “價(jià)格> 500 元且銷量 > 1000 件” 的商品,金融領(lǐng)域識(shí)別 “風(fēng)險(xiǎn)等級(jí)為高且逾期天數(shù) > 30 天” 的客戶,游戲數(shù)據(jù)分析中定位 “等級(jí) > 50 級(jí)但近 7 日未登錄” 的流失高價(jià)值用戶。相比單條件篩選,多列條件能更精準(zhǔn)地鎖定業(yè)務(wù)目標(biāo),為決策提供更聚焦的數(shù)據(jù)支撐。

二、基礎(chǔ)語(yǔ)法:邏輯運(yùn)算符與條件組合

Pandas 中多列條件篩選的核心是通過(guò)布爾索引實(shí)現(xiàn),需掌握三大邏輯運(yùn)算符的正確使用:

1. 邏輯與(&):同時(shí)滿足多個(gè)條件

當(dāng)需要篩選同時(shí)滿足列 A 條件和列 B 條件的記錄時(shí),使用&連接,且每個(gè)條件需用括號(hào)包裹(避免運(yùn)算符優(yōu)先級(jí)沖突)。

import pandas as pd

# 示例數(shù)據(jù):游戲用戶信息

data = {

  'user_id': [101, 102, 103, 104],

  'level': [45, 60, 30, 55],

  'last_login_days': [3, 15, 7, 20],

  'pay_total': [500, 1200, 80, 800]

}

df = pd.DataFrame(data)

# 篩選:等級(jí)>50且近15天未登錄(last_login_days>15)的用戶

condition = (df['level'] > 50) & (df['last_login_days'] > 15)

result = df[condition]

2. 邏輯或(|):滿足任一條件

當(dāng)需要篩選滿足列 A 條件或列 B 條件的記錄時(shí),使用|連接,同樣需注意括號(hào)包裹。

# 篩選:累計(jì)付費(fèi)>1000元 或 等級(jí)>50級(jí)的用戶

condition = (df['pay_total'] > 1000) | (df['level'] > 50)

result = df[condition]

3. 邏輯非(~):排除滿足條件的記錄

用于篩選不滿足某條件的記錄,常與&/|組合使用。

# 篩選:等級(jí)<=50級(jí)且非沉默用戶(last_login_days<=7)

condition = (df['level'] <= 50) & ~(df['last_login_days'] > 7)

result = df[condition]

三、進(jìn)階技巧:復(fù)雜條件的高效處理

對(duì)于包含多個(gè)字段、多層邏輯的復(fù)雜條件,需結(jié)合 Pandas 的高級(jí)方法提升可讀性與效率。

1. query () 方法:類 SQL 語(yǔ)法的條件篩選

當(dāng)條件涉及多列且邏輯復(fù)雜時(shí),query()方法支持字符串形式的條件表達(dá)式,語(yǔ)法更接近自然語(yǔ)言。

# 篩選:等級(jí)在50-60之間,且累計(jì)付費(fèi)>800元,且近15天內(nèi)登錄的用戶

result = df.query("50 <= level <= 60 & pay_total > 800 & last_login_days <= 15")

2. 函數(shù)式篩選:動(dòng)態(tài)生成條件

對(duì)于需要?jiǎng)討B(tài)計(jì)算的條件(如基于列間關(guān)系的規(guī)則),可使用apply()結(jié)合自定義函數(shù)實(shí)現(xiàn)。

# 定義條件函數(shù):高價(jià)值活躍用戶(付費(fèi)率=總付費(fèi)/等級(jí)>20,且登錄間隔<10天)

def is_high_value(row):

  pay_rate = row['pay_total'] / row['level']

  return pay_rate > 20 and row['last_login_days'] < 10

# 應(yīng)用函數(shù)篩選

result = df[df.apply(is_high_value, axis=1)]

3. 包含性條件:isin () 與多值匹配

當(dāng)某列需匹配多個(gè)離散值時(shí),isin()比多個(gè)==+|的組合更簡(jiǎn)潔。

# 篩選:用戶等級(jí)為30、45、60級(jí),且累計(jì)付費(fèi)>100的記錄

condition = df['level'].isin([30, 45, 60]) & (df['pay_total'] > 100)

result = df[condition]

四、實(shí)戰(zhàn)案例:游戲運(yùn)營(yíng)數(shù)據(jù)的多條件分析

以某手游運(yùn)營(yíng)數(shù)據(jù)為例,展示多列條件在實(shí)際業(yè)務(wù)中的應(yīng)用流程:

業(yè)務(wù)目標(biāo):篩選出 “可挽回的高價(jià)值流失用戶”,定義為:

  • 等級(jí)≥50 級(jí)(高等級(jí))

  • 累計(jì)付費(fèi)≥1000 元(高價(jià)值)

  • 最后登錄天數(shù)在 15-30 天之間(近期流失)

  • 歷史登錄天數(shù)≥100 天(深度用戶)

# 加載數(shù)據(jù)

運(yùn)營(yíng)數(shù)據(jù) = pd.read_csv("game_operation.csv")

# 組合多列條件

條件 = (

  (運(yùn)營(yíng)數(shù)據(jù)['等級(jí)'] >= 50) &

  (運(yùn)營(yíng)數(shù)據(jù)['累計(jì)付費(fèi)'] >= 1000) &

  (運(yùn)營(yíng)數(shù)據(jù)['最后登錄天數(shù)'].between(15, 30)) &  # between()簡(jiǎn)化范圍判斷

  (運(yùn)營(yíng)數(shù)據(jù)['歷史登錄天數(shù)'] >= 100)

)

# 提取目標(biāo)用戶并添加標(biāo)簽

可挽回用戶 = 運(yùn)營(yíng)數(shù)據(jù)[條件].copy()

可挽回用戶['用戶標(biāo)簽'] = '可挽回高價(jià)值流失用戶'

通過(guò)該篩選,運(yùn)營(yíng)團(tuán)隊(duì)可針對(duì)這類用戶推送專屬召回禮包,精準(zhǔn)提升回流率。

五、常見(jiàn)問(wèn)題與避坑指南

  1. 運(yùn)算符優(yōu)先級(jí)陷阱:忘記用括號(hào)分隔條件會(huì)導(dǎo)致邏輯錯(cuò)誤,例如df['a'] > 1 & df['b'] < 5會(huì)被解析為df['a'] > (1 & df['b']) < 5,必須寫成(df['a'] > 1) & (df['b'] < 5)。

  2. 數(shù)據(jù)類型沖突:當(dāng)列包含缺失值或非數(shù)值類型時(shí),條件判斷可能返回NaN,需先用dropna()fillna()處理,例如df[df['金額'].notna() & (df['金額'] > 0)]

  3. 大規(guī)模數(shù)據(jù)效率:對(duì)百萬(wàn)級(jí)以上數(shù)據(jù),query()和布爾索引效率優(yōu)于apply(),建議優(yōu)先選擇向量化操作。

  4. 條件復(fù)用:復(fù)雜條件建議用變量存儲(chǔ),避免重復(fù)編寫,例如high_value = df['付費(fèi)'] > 1000,后續(xù)可直接調(diào)用high_value & other_condition。

結(jié)語(yǔ)

多列條件篩選是 Pandas 數(shù)據(jù)處理的核心技能,其本質(zhì)是將業(yè)務(wù)規(guī)則轉(zhuǎn)化為可執(zhí)行的邏輯表達(dá)式。從基礎(chǔ)的&/|組合到進(jìn)階的query()與函數(shù)式篩選,選擇合適的方法既能保證代碼的可讀性,又能提升數(shù)據(jù)處理效率。在實(shí)際應(yīng)用中,需結(jié)合業(yè)務(wù)場(chǎng)景靈活設(shè)計(jì)條件,同時(shí)注意語(yǔ)法細(xì)節(jié)與性能優(yōu)化,讓數(shù)據(jù)篩選成為驅(qū)動(dòng)業(yè)務(wù)決策的精準(zhǔn)工具。

學(xué)習(xí)入口:https://edu.cda.cn/goods/show/3814?targetId=6587&preview=0

推薦學(xué)習(xí)書籍 《CDA一級(jí)教材》適合CDA一級(jí)考生備考,也適合業(yè)務(wù)及數(shù)據(jù)分析崗位的從業(yè)者提升自我。完整電子版已上線CDA網(wǎng)校,累計(jì)已有10萬(wàn)+在讀~ !

免費(fèi)加入閱讀:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }