问题描述
我有一个包含三列的表:年,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 (将#修改为@)