gpt4 book ai didi

python - pandas 比应用 lambda 更快的方式在每一行应用逻辑?

转载 作者:行者123 更新时间:2023-12-04 14:31:47 24 4
gpt4 key购买 nike

我有一个 df:

dfs = """
contract Valindex0 RB Valindex1
2 A00118 51 0 50
3 A00118 42 1 47
4 A00118 44 1 47

"""
df = pd.read_csv(StringIO(dfs.strip()), sep='\s+')
df:
  contract  Valindex0  RB  Valindex1
2 A00118 51 0 50
3 A00118 42 1 47
4 A00118 44 1 47
我想为每一行 df['Valindex'] 添加一个新列,
此列值是
 df['Valindex0']
或者
 df['Valindex1']
这取决于 df['RB']:
if df['RB']==0:
df['Valindex'] = df['Valindex0']
elif df['RB']==1:
df['Valindex'] = df['Valindex1']
现在我正在使用 apply lambda,但它很慢:
df['Valindex'] = df.apply(
lambda df: df["Valindex" + str(df["RB"])], axis=1)
输出应如下所示:
    contract    Valindex0   RB  Valindex1   Valindex
2 A00118 51 0 50 51
3 A00118 42 1 47 47
4 A00118 44 1 47 47
有什么更快的方法吗?

最佳答案

使用 np.where() :

df["Valindex"] = np.where(df["RB"].eq(0), df["Valindex0"], df["Valindex1"])
或者
使用 np.select() 对于多种情况和条件:
conditions = [df["RB"].eq(0), df["RB"].eq(1)]
labels = [df["Valindex0"], df["Valindex1"]]
df["Valindex"] = np.select(conditions, labels)
df 的输出:
    contract    Valindex0   RB  Valindex1   Valindex
2 A00118 51 0 50 51
3 A00118 42 1 47 47
4 A00118 44 1 47 47

关于python - pandas 比应用 lambda 更快的方式在每一行应用逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68826323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com