【发布时间】:2021-06-04 04:45:11
【问题描述】:
我有一个数据框,其中有一列(比如“总计”)包含数字数据。此列中的数据可以是正数、负数或零。零的两边没有范围限制。
我想根据“总计”列中的值创建具有特定指标或分类值的另一列。
例如(目标):
- P/N/Z 基于“总计”列中的正/负/零值。
- 基于“总计”列中的值的“...0-10000,10000-20000,...”等类
- +1,-1,0 基于大于、小于、等于“总计”列中的特定值的值。
到目前为止,我通过 if-else 语句遍历“Total”列中的每一行,然后将该值列表作为一列附加到数据框来创建一个单独的值列表。
for each in df['Total']:
values.append(cat1(each))
df['newcol'] = values
这里 cat1 是根据每个中的正/负/零值返回 P/N/Z 的函数。 values 是我将使用这个 for 循环创建的值列表。同样,我有上述目标中的 2 和 3 的功能。
def cat1(value):
if value > 0:
return "P"
elif value < 0:
return "N"
else:
return "Z"
但我希望有一个更简单更快的替代方案?
感谢您的帮助。
【问题讨论】:
-
Max 我认为缩短这种方法的方法是使用 List Comprehension 而不是 for 循环。但是有没有办法将函数(所有 if-else)合并到代码中以在数据框中创建一个新列?我们以前在 Excel 或其他应用程序中做的事情。
标签: python-3.x pandas dataframe calculated-columns