在Pandas数据框架中用最新的正值替换负值

在Pandas数据框架中用最新的正值替换负值

在这篇文章中,我们将讨论如何在Pandas DataFrame Column中用最新的前一个正值替换负值。

在这样做的时候,可能会出现两种情况 –

  • 如果不存在收益的正值,则值保持不被修改
  • 如果不存在进行中的正值,则值更新为0

让我们详细讨论一下这些案例。

情况1:如果不存在进行中的正值,则值保持不修改

一个变量被声明用来存储最近的正值,初始化为某个大的负整数。然后对数据框进行逐列迭代。

  • 如果数值为负数,则用前面的正数变量替换,如果存在的话,则保持不修改。
  • 而且,如果数值是正的,前面的正值变量会被更新。

示例:

import pandas as pd
  
  
# creating a pandas dataframe
df = pd.DataFrame([[8, -2, 0, 3, 51, 2],
                   [6, -2, -5, -7, 0, -1],
                   [-1, -12, -5, 4, 5, 3]])
print("Original DataFrame : \n")
print(df)
  
# declaring a pre defined value
prec_val = -999
  
# iterate over columns
for i in range(df.shape[1]):
  
    # resetting value over each column
    prec_val = -999
  
    # iterate over rows
    for j in range(df.shape[0]):
  
        # accessing the cell value
        cell = df.at[j, i]
  
        # check if cell value is negative
        if(cell < 0):
  
            # check if prec_val is not default
            # set value
            if(prec_val != -999):
  
                # replace the cell value
                df.at[j, i] = prec_val
        else:
  
            # store the latest value in variable
            prec_val = df.at[j, i]
  
print("Modified DataFrame : ")
print(df)

输出:

在Pandas数据框架中用最新的正值替换负值

情况2:如果不存在进行中的正值,则值更新为0

这种方法使用了数据框屏蔽的概念,以替换数据框的负值。这些值从左到右逐列遍历,以从上到下的方式进行。在这种方法中,最初,数据框单元中所有<0的值都被转换为NaN。

Pandas dataframe.fill()方法是用来填补数据框架中的缺失值。这个方法中的’fill’代表’向前填充’,它将最后遇到的有效观测值向前传播。ffill()函数被用来沿着指定的索引axis填充缺失的值。这个方法的语法如下:

语法: DataFrame.ffill(axis=None, inplace=False)

参数:

  • axis -{0,索引 1,列}。
  • inplace : 如果为真,就地填充。

接下来是fillna()方法,使用指定的值填充NA/NaN值。在这里,我们用0来填充NaN值,因为它是可能的最低正整数值。这样所有的负值都被转换为正值。这种方法可以适用于没有存储任何字符串值的数据框架。如果前面没有正值,那么负值就被替换成0。

import pandas as pd
  
# creating a pandas dataframe
data_frame = pd.DataFrame({'col1': [8, -2, 0, 3, 51, 2],
                           'col2': [-1, -2, -5, -7, 0, -1],
                           'col3': [-1, -12, -5, 4, 5, 3]})
  
print("Original DataFrame")
print(data_frame)
  
# masking the data frame
data_frame = data_frame.mask(data_frame.lt(
    0)).ffill().fillna(0).astype('int32')
  
print("Modified DataFrame")
print(data_frame)

输出:

在Pandas数据框架中用最新的正值替换负值

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程