如何将本地函数应用于python函数中数据帧的特定列?

2024-09-30 05:26:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python中定义一个函数,其中特定列中数据帧中的负值被限制为零。因此,我定义了一个函数,该函数将x作为输入,如果x为负,则将其限制为零(cap0),然后将该函数应用于特定列。然而,当我用python编写函数时,它一直在运行(就像我的函数没有闭包一样)。如果你能帮助我,我将不胜感激

另外,我对python还很陌生

def captozero(df, cap_vars):
   def cap0(x):
       x_out = x.copy()
       x_out = np.where(x_out < 0, 0, x)
       return x_out
   df_out = df.copy()
   df_out = df_out.apply(lambda x: cap0(x) if x.name in [cap_vars] else x)
   return df_out

Tags: 数据函数dfreturn定义defnpvars
2条回答

有一个函数DataFrame.clip可用于此目的:

import pandas as pd
df = pd.DataFrame({'col1':[-1,2,4],'col2':[2,-3,5], 'col3':[1,2,3]})
print(df, '\n')

df.update(df[['col1', 'col2']].clip(0))

print(df)

产生以下输出:

   col1  col2  col3
0    -1     2     1
1     2    -3     2
2     4     5     3 

   col1  col2  col3
0     0     2     1
1     2     0     2
2     4     5     3

请注意,使用update函数可以用新剪裁的版本覆盖数据框中的列

有一个numpy函数可以比较结果并取最大值。 就你而言

for i in cap_vars:
    df[i] = np.maximum(df[i], 0)

也可以对每列使用np.where

for i in cap_vars:
    df[i] = np.where(df[i] < 0, 0, df[i])

相关问题 更多 >

    热门问题