📌  相关文章
📜  用 Pandas DataFrame 中最新的前一个正值替换负值

📅  最后修改于: 2022-05-13 01:54:39.591000             🧑  作者: Mango

用 Pandas DataFrame 中最新的前一个正值替换负值

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

这样做时可能会出现两种情况——

  • 如果不存在继续的正值,则值保持不变
  • 如果不存在正在进行的正值,则值更新为 0

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

情况 1:如果不存在继续的正值,则值保持不变

声明一个变量来存储用一些大的负整数初始化的最新的前面的正值。然后按列执行数据帧的迭代。



  • 如果值为负,则将其替换为前面的正变量(如果存在),否则将保持不变。
  • 并且,如果值为正,则更新前一个正值变量。

例子:

Python3
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)


Python3
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)


输出:

情况 2:如果不存在继续的正值,则值更新为 0

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

熊猫 dataframe.ffill()方法用于填充数据框中的缺失值。此方法中的“ffill”代表“前向填充”,它向前传播最后一次遇到的有效观察。 ffill()函数用于沿指定的索引轴填充缺失值。此方法具有以下语法:

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

蟒蛇3

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)

输出: