【发布时间】:2023-01-07 01:25:11
【问题描述】:
我的公司跟踪第 3 方系统中的拒绝问题。任何给定的工单都可能有多种拒绝原因。我的同事将拒绝的工单列表导出到 Excel 文件,最终用于数据可视化。
我创建了一个 Jupyter Notebook 文件,该文件会将原因拆分为真或假的单独列。目前有 10 个可能的原因,所以我有 10 个单独的函数来检查每个值是否为真,并运行 10 个单独的 lambda。它工作完美,但不是很干净或可维护。
我正在努力寻找正确的方法(甚至只是一种可行的方法)将所有这些函数和 lambda 组合成一组更清晰的代码。
我有一系列 10 个功能,每个功能一个,几乎相同:
def reason_one (x):
value = 0
if 'reason_one' in x:
value = 1
else:
pass
return value
def reason_two (x):
value = 0
if 'reason_two' in x:
value = 1
else:
pass
return value
依此类推,我们目前使用的所有 10 个原因。
然后,我运行 10 个几乎相同的 lambda,一个接一个:
df['Reason One'] = df['Labels'].map(lambda x: reason_one(x))
df['Reason Two'] = df['Labels'].map(lambda x: verification(x))
有没有办法清理这个?理想情况下,我想创建一个字典,其中包含所有原因代码和应命名的列,然后循环遍历数据框上的标签列以获取每个可能的值,每次添加一列。
我有我的字典设置:
error_list = {
'reason_one': 'Reason One',
'reason_two': 'Reason Two',
'reason_three': 'Reason Three',
'reason_four': 'Reason Four'
}
我喜欢这个,因为我的同事只需更改该列表并运行 notebook 即可让一切正常运行。例如,他可能会添加一个新的原因;或编辑给定原因代码的列名称以使其更清晰。
我的想法是创建一个接受字典和列的函数,遍历字典键,将 0 或 1 附加到空列表,然后使用该列表创建一个新列。
我走到这一步:
def breakout_columns (errors, column):
column_values = []
for key in errors:
if key in column:
value = 1
else:
value = 0
column_values.append(value)
print(column_values)
当我运行它时,它确实产生了一个包含 10 个值的列表,但是即使其中一些应该为真,它们都是 0。我一直在寻找有关遍历数据帧行的资源,但我没有像我正在尝试做的那样远程看到任何东西。
除了这件作品不起作用之外,我担心我的方法存在固有缺陷,或者(a)我应该做一些完全不同的事情来尝试清理东西;或者 (b) 我尝试做的事情不可能或没有意义,所以我只需要坚持使用 10 个函数和 10 个 lambda。
任何指导将不胜感激!
【问题讨论】:
标签: python pandas lambda jupyter-notebook