首页 > 解决方案 > 在有条件的熊猫中除以前一行

问题描述

我正在尝试创建一个新列,它是前一行的划分。但有些行的值为 0。所以我的条件语句是:如果 2 行之间的除法是无穷大或 nan,则增长率列中的值为 0。否则,它将与前一行相除。

''' n=len(df) for j in range(0,n-1):

if ((df.iloc[j,4]/df.iloc[j-1,4]) == inf):
    df['GrowthRate']=0
else:
    df['GrowthRate'] = df.iloc[j,4]/df.iloc[j-1,4]
    j=j+1

'''

输出是我在列中的所有值都是 inf。

标签: python-3.xpandasloopsconditional-statements

解决方案


如果上面的值为 0 则除以np.inf,得到 0,否则除以前一个值

col = df.iloc[:,4]
df['GrowthRate'] = col.div(col.where(col.eq(0), np.inf))

如果NaN最后需要填写:

df['GrowthRate'] = col.div(col.where(col.eq(0), np.inf)).fillna(0)

推荐阅读