如果函数中的语句

问题描述

我有一个包含三列的表:年,pop1和pop2,而pop1和pop2是300年中两个不同国家的人口规模。

我的目标是创建一个能找到人口规模缩小两倍/十倍/ 100倍的年份的联合会。

为此,我构建了一个函数,该函数具有条件来检查给定人口规模是该人口规模的年份,例如,如果我们的初始人口规模为100M,我们想知道人口何时减少一半( 50M),该函数生成如下表:

        0.5
pop1    18
pop2    231

(pop1是18年后100M的一半,pop2是231年后50M。

年度罚款工作如下:

    s = pd.DataFrame(df.set_index('year').sub(pop_size).abs().idxmin(),columns=[multiplier])

问题是,如果要花费300多年才能得到该数字,即使是700年,生成的表也会显示300年。

为此,我创建了这个函数,假设如果年份数不在提供的表内,则删除带有300年的行:

def find_year(df,init_pop,multiplier):
    pop_size = init_poP*multiplier

    
    pop1_max = max(df['pop1'].unique().tolist())
    pop1_min = min(df['pop1'].unique().tolist())
    print(pop1_max)
    print(pop1_min)
    print(pop_size)
    
    pop2_max = max(df['pop2'].unique().tolist())
    pop2_min = min(df['pop2'].unique().tolist())
    
    s = pd.DataFrame(df.set_index('year').sub(pop_size).abs().idxmin(),columns=[multiplier])

    if (pop1_min<pop_size<pop1_max and pop2_min<pop_size<pop2_max):
        
        s = pd.DataFrame(df.set_index('year').sub(
        pop_size).abs().idxmin(),columns=[multiplier])
        return(s)
        
        
    elif (pop1_min<pop_size<pop1_max and not pop2_min<pop_size<pop2_max):
        s=s.drop('pop2',axis=0,inplace=True)
        return(s)

        
    elif (pop2_min<pop_size<pop2_max and not pop1_min<pop_size<pop1_max):
        s=s.drop('pop1',inplace=True)
        return(s)

问题:那不起作用。如果我少放0.5则可以,但是如果我放0.1或0.01,则无输出

我不知道为什么这行不通并且不删除行。

我的最终目标是能够根据函数中的条件删除该行。

这是生成表的方式:

def growth(p,r,t):
    time=np.arange(0,t+1,1)
    res=[p]
    for t in time:
        p=P*r
        res.append(p)
    return(pd.DataFrame(list(zip(time,res)),columns =['year','pop']))
        

country1=growth(100000000,0.962,300)
country2=growth(100000000,0.997,300)

data=pd.concat([country1,country2['pop']],axis=1)
data.columns=['year','pop1','pop2']
data

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)