基于另一列对 Dataframe 应用不同的函数

xqnpmsa8  于 2021-08-25  发布在  Java
关注(0)|答案(3)|浏览(192)

我有一个数据框,有两列。我试图根据数据框内的数字创建第三列。如果b列中的数字是正数,我希望c列等于ab列
如果b列中的数字是负数,我希望c列等于a
b*0.95列。
我想得到的一个例子是:

col_a col_b col_c
100.    1.   100
100.    -1.  -95
100.    10.  1000
100.    -10.  -950

I have currently tried this:

def profit_calculation(value):

    if value<0:
        return(a * b * 0.95)
    else:
        return(a * b) 

df['col_c']=df['col_b'].apply(profit_calculation)

但这似乎是不正确的。

bis0qfac

bis0qfac1#

df = pd.DataFrame({"a": [100, 100, 100, 100],
                   "b": [1, -1, 10, -10]})

df.a * df.b * (1 - 0.05 * (df.b < 0))

# out:

0     100.0
1     -95.0
2    1000.0
3    -950.0

说明:与浮点0.05相乘时,布尔级数 (df.b < 0) 被转换为整数(真=1,假=0),因此在负b的所有示例中,我们从1中减去0.05,从而在需要时得到0.95。

gxwragnw

gxwragnw2#

你可以用 np.where 并使用 gt :

import numpy as np
import pandas as pd

a_b =  df.col_a.mul(df.col_b)
df['col_c'] = np.where(df['col_b'].gt(0), a_b, a_b.mul(0.95))

其中打印:

>>> df

   col_a  col_b   col_c
0    100      1   100.0
1    100     -1   -95.0
2    100     10  1000.0
3    100    -10  -950.0
ukqbszuj

ukqbszuj3#

您可以使用lambda函数根据 Dataframe (df)中的数据创建新数据,请参见此处的lambda函数说明=>https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.dataframe.apply.html 它接受 Dataframe 中的一行参数,并返回对每一行所做的更新,我们称之为利润计算,并给它与参数中的行相对应的数据。所以你必须用

def profit_calculation(value):
  return value["col_b"]*value["col_a"] if value["col_b"] > 0 else value["col_b"]*value["col_a"]*.95  

df['col_c']=df.apply(lambda value: profit_calculation(value), axis=1)

相关问题