代码:
import pandas as pd
import numpy as np
df=pd.DataFrame([[2,5,6,10,11,12,15],
[3,4,5,7,10,15,16],
[7,10,15,16,19,20,21]],index=['0','1','2',],columns=list('abcdefg'))
s=eval(input('请输入一个30以内的整数:'))
for row in df.itertuples():
if row[1]<s<row[len(row)-1]:
s=s
while s not in row:
s=s+1
elif s<=row[1]:
s=row[1]
elif s>=row[len(row)-1]:
s=row[len(row)-1]
print(s)
问题:
输入一个数,要判断该数是否在dataframe的每一行中:如果在就返回输入的数;如果不在,就返回输入数后最近的一个数,且该数在dataframe对应行中。
按照上述代码,如果输入的s=3时,print(s)后,应该返回的是“5,3,7”,但最终返回的是“5,5,7”;
如果输入的s=7时,print(s)后,应该返回的是“10,7,10”,但最终返回的是“10,10,10”。
出现上述问题的原因是什么呢?求解答!谢谢!
因为你s改了之后没改回来,像输入3,第一行没找到就增大到可以找到的5,然后第二行开始就一直是用5在作比较
按照“想上天的狗”的方法,已经解决问题。谢谢!
以下为改正后的代码:
import pandas as pd
import numpy as np
df=pd.DataFrame([[2,5,6,10,11,12,15],
[3,4,5,7,10,15,16],
[7,10,15,16,19,20,21]],index=['0','1','2',],columns=list('abcdefg'))
a=eval(input('请输入一个30以内的整数:'))
for row in df.itertuples():
s=a
if row[1]<s<row[len(row)-1]:
while s not in row:
s=s+1
elif s<=row[1]:
s=row[1]
elif date_time()>=row[len(row)-1]:
s=row[len(row)-1]
print(s)