Pandas Dataframe - 如何检查列中数值的符号,如果为负则删除符号并在发生这种情况时创建另一列?

Posted

技术标签:

【中文标题】Pandas Dataframe - 如何检查列中数值的符号,如果为负则删除符号并在发生这种情况时创建另一列?【英文标题】:Pandas Dataframe - How do you check the sign of numeric values in a column, remove the sign if negative & create another column if this has happened? 【发布时间】:2021-06-24 15:05:53 【问题描述】:

Python 3.8,使用 Pandas。

我试图从 pandas 数据框列“DATA”中的负数中删除符号,只保留幅度,即所有值都是正数。本质上,将一列中的值乘以 -1,但仅当它为负时。这是容易的一点。然后在已反转的数据框中创建一条记录。因此,在这种情况下,创建另一个名为“Tubes Inverted”的列

 #Check sign and create a column recording if this has been inverted. 
            num = df['DATA']._get_numeric_data()
            if num < 0:
                df['Tubes Inverted'] = "Yes"
            else:
                df['Tubes Inverted'] = "No"
            num[num < 0] = num*-1

这里的问题是我试图确定一个系列的真值,这是模棱两可的,无法工作,所以我尝试了:

            num = df['DATA']._get_numeric_data()
            for i in num:
                if i < 0:
                    df['Tubes Inverted'] = "Yes"
                else:
                    df['Tubes Inverted'] = "No"
            num[num < 0] = num*-1

但是我认为这只是它正在测试的数据的索引位置,而不是数据本身。

必须有一个更优雅和 Pythonic 的解决方案!

【问题讨论】:

【参考方案1】:

这里有两个要求,这里也不需要循环:

首先,检查条件后使用np.where创建一个条件列:

df['Tubes Inverted'] = np.where(df['DATA']<0,"Yes","No")

然后使用series.abs() 可以将DATA 列转换为绝对值。

df['DATA'] = df['DATA'].abs()

【讨论】:

以上是关于Pandas Dataframe - 如何检查列中数值的符号,如果为负则删除符号并在发生这种情况时创建另一列?的主要内容,如果未能解决你的问题,请参考以下文章

检查pandas [duplicate]中的dataframe列中是否包含某个值

检查 Pandas DataFrame 列中的字符串是不是在字符串列表中

如何在同一列中写入两个不同变量值的excel/pandas Dataframe

Pandas:按行从 DataFrame 的特定列中选择值

如何根据有序列表替换pandas dataframe列中的元素?

如何从 Python Pandas Dataframe 中的 STRING 列中提取嵌套字典?