【问题标题】:Offset function using If else statement使用 If else 语句的偏移函数
【发布时间】:2019-10-02 19:01:22
【问题描述】:

我有一个 pd df,我想根据以下条件创建第三列“LCC_saving”。

nvals=df['Offset_base']

for i, row in df.iterrows():

if nvals <0:
   df.at[i,'LCC_savings']=df.loc[i+row['Offset_base']]['LCC']-row['LCC']
else:
    df.at[i,'LCC_savings'] = 0

df

     Offset_base     LCC    LCC_saving 
0      1             $240       $0
1      0             $239       $0
2     -1             $244     $239-$244=-$4.77

我收到以下错误消息:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

有人可以帮忙写代码吗?

【问题讨论】:

    标签: pandas


    【解决方案1】:

    虽然这类问题可以通过iterrowsiat 或者甚至一些暗示移位的操作来解决,但我认为最简单、最快和最直接的方法是对底层的numpy数组进行计算并分配结果到数据框:

    import pandas as pd, numpy as np
    
    df = pd.DataFrame({'Offset_base': [1,0,-1], 'LCC': [240,239,244]})
    
    a = df.to_numpy()
    LCC_savings = np.zeros(len(df))
    for i in range(len(df)):
        if a[i,0] < 0:
            LCC_savings[i] = a[i+a[i,0],1] - a[i,1]
    df['LCC_savings'] = LCC_savings
    

    结果:

       Offset_base  LCC  LCC_savings
    0            1  240          0.0
    1            0  239          0.0
    2           -1  244         -5.0
    

    【讨论】:

    • 感谢您的帮助。我昨天修改了我的代码如下:如果 nvals.iloc[i]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 2021-11-14
    • 1970-01-01
    • 2019-02-28
    • 2019-04-09
    • 2022-07-28
    • 1970-01-01
    相关资源
    最近更新 更多