前提
示例代码中,从 csv 导入数据并建一个 DataFrame。
成功代码
以下代码曾验证成功,表示字段『地区』既要等于『香港』,同时『一级部门』也要等于『创意部』、『运营部』、『广告部』和『PR』,如此类推:
import pandas as pd
def zustand(row):
if (row['地区'] == '香港') and (row['一级部门'] == '创意部'): return True
if (row['地区'] == '香港') and (row['一级部门'] == '运营部'): return True
if (row['地区'] == '香港') and (row['一级部门'] == '广告部'): return True
if (row['地区'] == '香港') and (row['一级部门'] == 'PR'): return True
if (row['一级部门'] == 'PR') and (row['二级部门'] == '测试组'): return True
if (row['一级部门'] == 'PR') and (row['二级部门'] == '美术部'): return True
if (row['一级部门'] == 'PR') and (row['二级部门'] == 'PR'): return True
else:
return False
df = pd.read_csv(r'D:\Downloads\输入文件.csv',encoding= 'utf-8')
df=df[df.apply(zustand, axis=1)]
df.to_excel(r'D:\Downloads\输出文件.xlsx')
代码中的代码
无效示例
其中『地区』和『一级部门』要用and连接起来,如果分开写,比如以下代码:
def zustand(row):
if row['地区'] == '香港' : return True
if row['一级部门'] == '创意部': return True
if row['一级部门'] == '运营部': return True
if row['一级部门'] == '广告部': return True
else:
return False
将会出现事实上没有筛选的局面
补充
『df=df[df.apply(zustand, axis=1)]』还有另一种写法:
# 将 apply 函数与 lambda 结合,将条件委托给函数
# 如果希望“df.apply”所有信息都在一行中,则需要 axis=1
df[df.apply(lambda row: zustand(row), axis=1)]