【问题标题】:Assigning categorical or values in a new column based on numeric values from another column in Python Dataframe根据 Python Dataframe 中另一列的数值在新列中分配分类值或值
【发布时间】:2021-06-04 04:45:11
【问题描述】:

我有一个数据框,其中有一列(比如“总计”)包含数字数据。此列中的数据可以是正数、负数或零。零的两边没有范围限制。

我想根据“总计”列中的值创建具有特定指标或分类值的另一列。

例如(目标):

  1. P/N/Z 基于“总计”列中的正/负/零值。
  2. 基于“总计”列中的值的“...0-10000,10000-20000,...”等类
  3. +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


【解决方案1】:

我不知道这种方法是否更快,但它肯定更好地利用了 pandas 功能:

def cat1(value):
    if value > 0:
        return "P"
    elif value < 0:
        return "N"
    else:
        return "Z"
df[newcol] = df.apply(lambda row: cat1(row['Total']), axis = 1)

【讨论】:

    猜你喜欢
    • 2016-09-06
    • 2020-03-19
    • 2018-09-09
    • 1970-01-01
    • 2014-08-21
    • 2016-02-01
    • 1970-01-01
    • 2020-09-26
    • 2019-08-02
    相关资源
    最近更新 更多